백준 10828번: 스택 [Python]

kimminjunnn·2026년 1월 19일

알고리즘

목록 보기
296/311

문제 출처 : https://www.acmicpc.net/problem/10828
난이도 : 실버 4


문제 파악

정수 스택을 하나 구현하고, 아래 명령들을 처리해서 출력하면 된다.

  • push X : 스택에 X 넣기
  • pop : 스택에서 맨 위 값 빼서 출력 (없으면 -1)
  • size : 스택에 들어있는 정수 개수 출력
  • empty : 비어있으면 1, 아니면 0
  • top : 스택 맨 위 값 출력 (없으면 -1)

해결 아이디어

스택은 파이썬 list 하나로 끝난다.

  • push: append
  • pop: pop() (단, 비어있으면 -1)
  • top: stack[-1] (단, 비어있으면 -1)
  • size: len(stack)
  • empty: 1 if len(stack)==0 else 0

명령은 문자열로 들어오니까 split()해서 구분한다.

  • push는 두 토큰(push, X)
  • 나머지는 한 토큰

해답 코드

import sys
input = sys.stdin.readline

N = int(input())

stack = []
out = []

for _ in range(N):
    cmd = input().split()

    if cmd[0] == "push":
        stack.append(int(cmd[1]))
    elif cmd[0] == "pop":
        if stack:
            out.append(str(stack.pop()))
        else:
            out.append("-1")
    
    elif cmd[0] == "size":
        out.append(str(len(stack)))
    
    elif cmd[0] == "empty":
        out.append("1" if not stack else "0")

    elif cmd[0] == "top":
        if stack:
            out.append(str(stack[-1]))
        else:
            out.append("-1")
    
print("\n".join(out))

  • 출력이 여러 번이라 print()를 매번 호출하면 느려질 수 있음
    그래서 out 리스트에 모아서 마지막에 join으로 한 번에 출력해준 코드이다.

자주 실수하는 부분

  • top, pop에서 비어있을 때 예외 터지는 거 방지해야 함 (stack[-1], stack.pop() 바로 쓰면 터짐)
profile
Frontend Engineers

0개의 댓글