매일의 화씨 온도 리스트 T를 입력받아서, 더 따뜻한 날씨를 위해서는 며칠을 더 기다려야하는지를 출력하라.
ex) 입력 T = [73,74,75,71,69,72,76,73] -> 출력: [1,1,4,2,1,1,0,0]
def dailyTemp(T):
answer = [0] * len(T)
stack = []
for i, cur in enumerate(T):
# 현재 온도가 스택 값보다 높다면 현재 인덱스 - stack 인덱스
while stack and cur > T[stack[-1]]:
last = stack.pop()
answer[last] = i - last
stack.append(i)
return answer
큐를 이용해 다음 연산을 지원하는 스택을 구현하라.
class MyStack:
def __init__(self):
self.q = collections.deque()
def push(self,x):
self.q.append(x)
# 요소 삽입 후 맨 앞에 두는 상태로 재정렬
for _ in range(len(self.q) - 1) :
self.q.append(self.q.popleft())
def pop(self):
return self.q.popleft()
def top(self):
return self.q[0]
def empty(self):
return len(selq.q) == 0
스택을 이용해 다음 연산을 지원하는 큐를 구현하라.
class MyQueue:
def __init__(self):
self.input = []
self.output = []
def push(self,x):
self.input.append(x)
def pop(self):
self.peek()
return self.output.pop()
def peek(self):
#output이 없으면 모두 재입력
if not self.output:
while self.input:
self.output.append(self.input.pop())
return self.output[-1]
def empty(self):
return self.input == [] and self.output == []
원형 큐를 디자인하라.
class MyCircularQueue:
def __init__(self,k):
self.q = [None] * k
self.p1 = 0
self.p2 = 0
# enQueue(): rear포인터 이동
def enQueue(self, value) :
if selq.q[self.p2] is None:
self.q[self.p2] = value
self.p2 = (self.p2 + 1) % self.maxlen
return True
else:
return False
# deQueue(): front 포인터 이동
def deQueue(self):
if self.q[self.p1] is None:
return False
else:
self.q[self.p1] = None
self.p1 = (self.p1 +1)% self.maxlen
return True
def Front(self):
return -1 if self.q[self.p1] is None else self.q[self.p1]
def Rear(self):
return -1 if self.q[self.p2 - 1 ] is None else self.q[self.p2 - 1]
def isEmpty(self):
return self.p1 == self.p2 and self.q[self.p1] is None
def isFull(self):
return self.p1 == self.p2 and self.q[self.p1] is not None