BOJ 10828. 스택 (Python)
2021. 2. 16. 15:58ㆍProblem Solving/BOJ
BOJ 10828. 스택
https://www.acmicpc.net/problem/10828
풀이
어려운 문제는 아니나, 파이썬으로 풀이를 할 때 pop()
함수에 파이썬 내장함수 pop()
을 사용하면 재귀호출을 하는 불상사가 생긴다. 이것이 유일하게? 주의할 점이다.
그래서 stack_top
변수로 스택의 사이즈를 관리하고, pop할때는 임시변수에 담았다가 del
을 이용해 리스트에서 삭제하고, 임시변수에 담은것을 return 해 주었다.
if len(command) > 1:
if command[0] == "push":
tmp = int(command[1])
s.push(tmp)
길이가 1보다 크면 무조건 push
이기때문에 이렇게 해 주었고,
배열의 첫번째 원소인 command[0]
는 항상 명령어이기 때문에 command[0]
으로 명령어를 판단하는것으로 했다.
소스코드
import sys
class Stack:
def __init__(self):
self.stack = []
self.stack_top = -1
def push(self, x: int):
self.stack.append(x)
self.stack_top += 1
def pop(self):
if self.stack_top == -1:
return -1
tmp = self.stack[self.stack_top]
del self.stack[self.stack_top]
self.stack_top -= 1
return tmp
def size(self):
return self.stack_top + 1
def empty(self):
if self.stack_top == -1:
return 1
else:
return 0
def top(self):
if self.stack_top == -1:
return -1
return self.stack[self.stack_top]
s = Stack()
N = int(input())
for _ in range(N):
command = sys.stdin.readline().split()
if len(command) > 1:
if command[0] == "push":
tmp = int(command[1])
s.push(tmp)
else:
if command[0] == "pop":
print(s.pop())
elif command[0] == "size":
print(s.size())
elif command[0] == "empty":
print(s.empty())
elif command[0] == "top":
print(s.top())
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
BOJ 11723. 집합 (Python) (0) | 2021.02.19 |
---|---|
BOJ 11866. 요세푸스 문제 0 (Python) (0) | 2021.02.17 |
BOJ 10816. 숫자 카드 2 (Python) (0) | 2021.02.16 |
BOJ 9012. 괄호 (Python) (0) | 2021.02.16 |
BOJ 1978. 소수 찾기 (Python) (0) | 2021.02.15 |