목록코딩테스트 (98)
거누의 개발노트
문제 원형 큐를 디자인하라. 초기 셋팅 class MyCircularQueue: def __init__(self, k: int): def enQueue(self, value: int) -> bool: def deQueue(self) -> bool: def Front(self) -> int: def Rear(self) -> int: def isEmpty(self) -> bool: def isFull(self) -> bool: 입력 ["MyQueue","push","push","peek","pop","empty"] [[],[1],[2],[],[],[]] 출력 [null,null,null,1,1,false] 작성한 코드 class MyCircularQueue: def __init__(self, k: int):..
문제 스택을 이용해 다음 연산을 지원하는 큐를 구현하라. 초기 셋팅 class MyQueue: def __init__(self): def push(self, x: int) -> None: def pop(self) -> int: def peek(self) -> int: def empty(self) -> bool: 입력 ["MyQueue","push","push","peek","pop","empty"] [[],[1],[2],[],[],[]] 출력 [null,null,null,1,1,false] 작성한 코드 class MyQueue: def __init__(self): self.stack = [] def push(self, x: int) -> None: self.stack.append(x) def pop(se..
문제 큐를 이용해 다음 연산을 지원하는 스택을 구현하라. 초기 셋팅 class MyStack: def __init__(self): def push(self, x:int): def top(self): def pop(self): def empty(self): 입력 ["MyStack","push","push","top","pop","empty"] [[],[1],[2],[],[],[]] 출력 [null,null,null,2,2,false] 작성한 코드 import collections class MyStack: def __init__(self): self.q = collections.deque() def push(self, x:int): return self.q.append(x) def top(self): re..
문제 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다. N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로..
문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라. 입력1 8 4 3 6 8 7 5 2 1 출력1 + + +..
문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다. 여러분은 입력으로 주어진 괄호 문자열..
문제 매일의 화씨 온도 리스트 T를 입력받아서, 더 따뜻한 날씨를 위해서는 며칠을 더 기다려야 하는지를 출력하라 입력 T1 = [73,74,75,71,69,72,76,73] 출력 [1, 1, 4, 2, 1, 1, 0, 0] 작성한 코드 - 이중 for 문 def daily_temperatures1(T): t = [0]*len(T) count = 0 # 이중 for 문 for i in range(len(T)): count = 0 for j in range(i+1,len(T),1): # 카운팅 하다가 count += 1 # 다음 온도가 클 때 if T[i] < T[j]: t[i] = count break return t 리코드에서 시간 초과가 나왔다. - 스택을 이용해서 풀어 보자 책에 있는 코드 def ..
문제 중복된 문자를 제외하고 사전식 순서로 나열하라. 입력 s1 = 'bcabc' s2 = 'cbacdcbc' 출력 r1 = 'abc' r2 = 'acdb' 작성한 코드 def removeDuplicateLetters(s: str) -> str: counter = collections.Counter(s) stack = [] seen = set() for char in s: counter[char] -= 1 if char in seen: continue # 1. stack 안에 값이 존재하는지 # 2. char 값보다 스택 top에 있는 값이 크면 # 3. 스탭 top의 숫자가 0보다 크면 while(stack and char 0): # ..