Computer Science/Algorithm
[백준] 10828번 스택 구현 - 시간초과문제
9루트
2023. 1. 8. 23:06
스택 문제 예시와 답 모두 맞는 것 같은데, 시간 초과가 뜬다.
고작 O(N)일 뿐인데... 이상하다.
# BOJ_10828
n = int(input())
stack = []
for _ in range(n):
command = list(map(str, input().split()))
# push
if command[0] == 'push':
stack.append(int(command[1]))
# pop
elif command[0] == 'pop':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
del stack[-1]
# size
elif command[0] == 'size':
print(len(stack))
# empty
elif command[0] == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
# top
elif command[0] == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
찾아봤더니 input()이 아닌 sys.stdin.readline()을 써야 시간 초과가 나지 않는다고 한다.
그 이유는 아래 블로그에 친절하게 써있다.
[Python 문법] 파이썬 입력 받기(sys.stdin.readline)
파이썬으로 코딩 테스트를 준비한다면, 반드시 알아야 할 입력방식인 sys.stdin.readline()에 대한 정리 입니다.
velog.io
맨 첫줄 Test case를 입력받을 때는 input()을 사용해도 괜찮다.
그러나 반복문으로 여러줄 입력받는 상황에서는 반드시 sys.stdin.readline()을 사용해야 시간초과가 발생하지 않는다고 한다.
# BOJ_10828
import sys
n = int(input())
stack = []
for _ in range(n):
command = list(map(str, sys.stdin.readline().split()))
로 바꿔주었다.
드디어 맞았다~
다른 풀이를 보니 클래스로 구현하는 방법도 있었다.
if else가 아니라
각 기능별로 메서드 함수로 나눠주니
가독성이 더 높은 것 같다.
굳굳