문제
https://www.acmicpc.net/problem/28278

문제 이해
문제 이름과 같이 스택에 관한 문제이다.
명령어(1~5)에 따라 명령을 수행하면 되는 차례대로 풀면 되는 문제이다.
문제 풀이(정답)
import sys
input=sys.stdin.readlin
n = int(input())
stack = []
for _ in range(n):
cmd = input().split()
if cmd[0] == '1':
stack.append(cmd[1])
elif cmd[0] == '2':
if len(stack) == 0:
print(-1)
else:
print(stack.pop())
elif cmd[0] == '3':
print(len(stack))
elif cmd[0] == '4':
if len(stack) == 0:
print(1)
else:
print(0)
elif cmd[0] == '5':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
이 문제에서 내가 놓쳤던 부분이 2가지 있다.
문제점 1 ] split()
첫번째는 cmd 명령어를 받을 때 1번의 경우 '1 x'를 입력하면 x를 스택에 넣는다.
나는 x가 한자리 수인 경우만 생각하고 cmd[-1]로 추가를 했는데 이렇게 되면 오답이 된다.
input()값을 분리한 후 값을 추가하면 해결 할 수 있다.
cmd = input().split()
문제점 2 ] 시간초과
두번째는 시간초과 문제이다.
시간초과 문제는 빈번하게 발생하는 문제이다. 여기서도 역시 sys모듈을 사용하니 해결되었다.
import sys
input = sys.stdin.readline
시간초과 결과가 나타났을 때, sys 모듈을 사용해야 하는 가능성이 높은 경우를 정리해 봤다.
1. 입력 개수가 클 때 (1만~10만 개 이상)
2. 반복문을 사용해 여러 줄을 입력 받을 때
이러한 경우에 시간초과 문제가 나타난다면 일단 input()을 sys 모듈로 사용해 보면 시간초과 문제가 해결될 수도 있다.
'알고리즘문제풀이' 카테고리의 다른 글
| [백준/Python] 2108번 통계학 (0) | 2025.03.06 |
|---|---|
| [백준/Python] 11729번 2×n 타일링 (0) | 2025.03.05 |
| [백준/Python] 11652번 카드 (0) | 2025.02.28 |
| [백준/Python] 7785번 회사에 있는 사람 (0) | 2025.02.27 |
| [백준/Python] 2563번 색종이 (0) | 2025.02.26 |
