문제
풀이
스택을 구현하는 문제이다. 파이썬의 경우, 스택을 직접 구현하지 않고도, 리스트를 이용해서 유연하게 사용할 수 있다.
push의 경우 operand가 존재하기 때문에 입력받을 때부터 split 메소드를 이용하여 입력받았다.
좀더 스택스럽게 구현하기 위해 isempty 함수만 별도로 구현했고, 나머지는 기존 리스트 클래스에 존재하는 메소드를 이용하여 구현하였다.
인덱스 값 중 -1은 맨 뒤의 위치를 의미하는 인덱스이다. append 메소드를 사용하면 리스트에서 자연스럽게 뒤쪽으로 값이 추가되기 때문에, 뒤의 값을 빼내기 위해 -1 인덱스를 활용하였다. insert 메소드를 통해 값을 앞에 넣을수도 있지만, append는 O(1)의 시간 복잡도를 갖고, insert는 O(n)의 시간 복잡도를 갖기 때문에 append 메소드를 활용하였다.
코드
N = int(input())
op_list = []
for i in range(N):
op_list.append(input().split(" "))
def isempty(stack):
return len(stack) == 0
st = []
for op in op_list:
if op[0] == "push":
st.append(int(op[1]))
elif op[0] == "pop":
if isempty(st):
print(-1)
else:
print(st.pop(-1))
elif op[0] == "size":
print(len(st))
elif op[0] == "empty":
if isempty(st):
print(1)
else:
print(0)
elif op[0] == "top":
if isempty(st):
print(-1)
else:
print(st[-1])
'Development > Algorithm' 카테고리의 다른 글
[boj] 1874 - 스택 수열 (0) | 2021.03.08 |
---|---|
[boj] 2164 - 카드2 (0) | 2021.03.08 |
[boj] 18258 - 큐2 (0) | 2021.03.04 |
[boj] 9012 - 괄호 (0) | 2021.03.04 |
[boj] 1158 - 요세푸스 문제 (0) | 2021.03.04 |