728x90
🤖
문제
https://www.acmicpc.net/problem/10828
풀이
시간초과로 구글링을 하였고, 입력값을 받는 방법을 변경하여 해결했습니다.
input() 대신 속도가 더 빠르다고 하는 sys.stdin.readline()을 사용했습니다.
속도 차이가 나는 이유는 버퍼의 크기가 다르기 때문으로 보입니다.
sys.stdin.readline() 버퍼의 크기가 커서 한번에 많은 처리를 하는 것입니다.
또한 출력내용을 한번에 모아서 출력하면 속도가 조금 더 빨라집니다.
단순하게 생각하면 print를 바로바로 해주는게 빠를것 같은데 컴퓨터는 print 명령을 처리하는 것이 힘든가 봅니다.
최종 코드
from sys import stdin
N = int(stdin.readline())
stack = list()
answer = []
for _ in range(N):
command = stdin.readline().split()
if command[0] == 'push':
val = int(command[1])
stack.append(val)
elif command[0] == 'pop':
answer.append(stack.pop() if len(stack) != 0 else -1)
elif command[0] == 'size':
answer.append(len(stack))
elif command[0] == 'empty':
answer.append(0 if len(stack) != 0 else 1)
elif command[0] == 'top':
answer.append(stack[-1] if len(stack) != 0 else -1)
result = ""
for el in answer:
result += (str(el) + '\n')
print(result)
시간초과 발생한 코드
N = int(input())
stack = list()
answer = []
for _ in range(N):
command = input().split()
if command[0] == 'push':
val = int(command[1])
stack.append(val)
elif command[0] == 'pop':
print(stack.pop() if len(stack) != 0 else -1)
elif command[0] == 'size':
print(len(stack))
elif command[0] == 'empty':
print(0 if len(stack) != 0 else 1)
elif command[0] == 'top':
print(stack[-1] if len(stack) != 0 else -1)
모아서 한번에 print한 경우 144ms, 140ms 소요된 반면, 따로따로 print한 경우 164ms, 180ms 소요됐습니다.
728x90
'유물 > └ 백준' 카테고리의 다른 글
<백준(파이썬)> 10815번: 숫자 카드 (0) | 2022.04.01 |
---|---|
<백준(파이썬)> 1715번: 카드 정렬하기 (0) | 2022.03.30 |
<백준(파이썬)> 1068번: 트리 (0) | 2022.03.23 |
<백준(node.js)> 1978번: 소수 찾기 (0) | 2022.02.22 |
<백준(node.js)> 10757번: 큰 수 A+B (0) | 2022.02.21 |