문제
문제 풀이
- 스택의 연산만을 활용하기 위해서는 2개의 스택이 필요하다
- 이유는 맨 마지막 값만을 활용할 수 있기 때문에 스택의 연산으로 값을 추출하면 값이 곧 최신에 들어간 값(마지막 값)이다.
- 그런데 큐는 맨 처음에 들어간 값이 추출돼야 해서 스택의 연산으로 할 경우 이동이 필요하다.
- output 값이 아무것도 없기 전까지는 재입력하는 알고리즘이 돌아가지 않는다
- 시간복잡도는 O(1) 로 계산되게끔 구현한다
- 실행속도 : 18 ms
class MyQueue(object):
def __init__(self):
self.input = []
self.output = []
def push(self, x):
"""
:type x: int
:rtype: None
"""
self.input.append(x)
def pop(self):
"""
:rtype: int
"""
# input 값을 재정렬하는 과정 거친 후
self.peek()
# 제일 처음에 들어온 값을 추출
return self.output.pop()
def peek(self):
"""
:rtype: int
"""
# 출력값이 아무것도 없다면 입력값 확인해서 값 재정렬
if not self.output:
# 새로 들어온 값이 있다면
# 해당 값은 output으로 queue 구조로 재입력 돼야 함
while self.input:
# 우선 input값에서 마지막 값을 빼고
# 해당 값을 output에 집어 넣는다
self.output.append(self.input.pop())
# 결과값이 맨 마지막 위치한 값이 제일 처음 들어온 값으로 위에서 세팅했음
return self.output[-1]
def empty(self):
"""
:rtype: bool
"""
# 입력값과 결과값 stack을 모두 확인해야 함
# 입력값에 값이 들어온 후 결과값에 재정령 안 돼 있을 수도 있기 때문
return self.input == [] and self.output == []