[백준] 10828번. 스택 (파이썬)
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성한다. 명령은 총 5가지 이다.
push(x)
: 정수 x를 스택에 넣는다.
pop()
: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size()
: 스택에 들어있는 정수의 개수를 출력한다.
empty()
: 스택이 비어있으면 1, 아니면 0을 출력한다.
top()
: 스택의 가장 위에 있는 정수를 출력한다. 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
풀이
리스트를 사용해 스택을 구현한 후, 5가지 함수를 구현했다.
- push(x)
def push(x):
stack.append(x)
- pop()
def pop():
# if len(stack) == 0:
# if not stack:
# return -1
# else:
# return stack.pop()
return stack.pop() if stack else -1
pop(), empty(), top()은 스택이 비어있는지 검사해야하는데, 처음에
len(stack) == 0
을 스택이 비어있는 경우로 간주해 결과가 이상하게 나왔다.
스택이 비어있는지 확인하려면if stack:
으로 확인해야 한다.
- size()
def size():
return len(stack)
- empty()
def empty():
return 0 if stack else 1
- top()
def top():
return stack[-1] if stack else -1
pop()
은 스택의 가장 위에 있는 값을 반환하면서 삭제하지만,top()
은 삭제하지 않고 반환만 한다.
둘 다 스택의 가장 위에 있는 값을 반환하지만, 삭제 여부가 다르다.
전체 코드
# 리스트로 스택 구현
def push(x):
stack.append(x)
def pop():
return stack.pop() if stack else -1
def size():
return len(stack)
def empty():
return 0 if stack else 1
def top():
return stack[-1] if stack else -1
import sys
N = int(input())
stack = []
for _ in range(N):
input_split = sys.stdin.readline().rstrip().split()
cmd = input_split[0]
if cmd == "push":
push(input_split[1])
elif cmd == "pop":
print(pop())
elif cmd == "size":
print(size())
elif cmd == "empty":
print(empty())
elif cmd == "top":
print(top())
Author And Source
이 문제에 관하여([백준] 10828번. 스택 (파이썬)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ny_/백준-10828번.-스택-파이썬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)