문제 바로가기 👉 백준 10828번
☑️ 문제 요약
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램 작성
명령 종류
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
☑️ KEY 포인트
- 문제 풀이 과정을 먼저 생각한다.
- 먼저 몇 개의 명령이 입력될 건지 입력받는다.
- 입력받은 명령의 수 만큼 명령을 입력 받는다.
- 명령 하나를 입력받을 때, 위 '명령 종류'의 각 케이스에 대한 결과값을 반환한다.
- 위 과정을 코드로 구현한다.
- 스택은 리스트([])를 통해 구현한다.
- if~elif~else 문을 통해서 명령 종류를 구분한다.
- 반복문을 통해 처음에 입력받은 명령의 개수 만큼 명령을 입력받도록 구현한다.
- 실패했던 코드
- 원인 : 반복문 내에서 input()를 통해 입력을 받으니 성능이 저하되어 시간이 초과되었다.
- sys.stdin.readline()을 통해 입력 받으면 시간이 단축된다.
ls = []
num1 = int(input())
for i in range(num1):
order = input()
order_info = order.split()
if order_info[0] == 'push':
ls.insert(0, order_info[1])
elif order_info[0] == 'pop':
if len(ls) > 0:
print(ls[0])
ls = ls[1:]
else:
print(-1)
elif order_info[0] == 'size':
print(len(ls))
elif order_info[0] == 'empty':
if len(ls) == 0 : print(1)
else : print(0)
elif order_info[0] == 'top':
if len(ls) > 0:
print(ls[0])
else:
print(-1)
☑️ 해결 코드
import sys
ls = []
num1 = int(input())
for i in range(num1):
# sys.stdin.readline()을 통해 입력받기
order = sys.stdin.readline().rstrip()
order_info = order.split()
if order_info[0] == 'push':
ls.insert(0, order_info[1])
elif order_info[0] == 'pop':
if len(ls) > 0:
print(ls[0])
ls = ls[1:]
else:
print(-1)
elif order_info[0] == 'size':
print(len(ls))
elif order_info[0] == 'empty':
if len(ls) == 0 : print(1)
else : print(0)
elif order_info[0] == 'top':
if len(ls) > 0:
print(ls[0])
else:
print(-1)
'Coding Test > Algorithm #Python3' 카테고리의 다른 글
[백준] 괄호 #자료구조 #알고리즘 (0) | 2025.03.31 |
---|---|
[백준] 단어 뒤집기 #자료구조 #알고리즘 (0) | 2025.03.30 |
[프로그래머스] K번째수 #정렬 #알고리즘 (0) | 2025.03.21 |
[프로그래머스] 같은 숫자는 싫어 #스택/큐 #알고리즘 (0) | 2025.03.20 |
[프로그래머스] 폰켓몬 #해시 #알고리즘 (2) | 2025.03.19 |