스택 문제 예시와 답 모두 맞는 것 같은데, 시간 초과가 뜬다.
고작 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()을 써야 시간 초과가 나지 않는다고 한다.
그 이유는 아래 블로그에 친절하게 써있다.
맨 첫줄 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가 아니라
각 기능별로 메서드 함수로 나눠주니
가독성이 더 높은 것 같다.
굳굳
'Computer Science > Algorithm' 카테고리의 다른 글
[백준] 1764번 듣보잡, 시간초과 (0) | 2023.01.11 |
---|---|
[백준] 1181번 단어정렬 - 시간초과 (0) | 2023.01.09 |
[백준] 2108번 통계학, 중앙값: 인덱스 조심(반올림 말고 내림) (0) | 2023.01.07 |
[백준] 1929번 소수 구하기, 실버3, python (0) | 2023.01.07 |
[백준] 1018번 체스판 다시 칠하기, python (0) | 2023.01.07 |