입력을 input으로 받고 이리저리 시간을 체크해가며 시간을 줄이려고 해봐도 전혀 줄지 않고 늘기만 해서 결국 힌트를 찾았는데 입력을 sys.stdin.readline()으로 받으면 해결이 되었습니다.
이 둘의 시간차이가 크게 나는 것은
버퍼에서 입력을 한번에 받아서 가져오느냐(sys)
캐릭터 하나하나 따로 가져오느냐 차이라고 합니다.
참고로 sys.stdin.readline()은 개행문자도 입력받으니 strip()이나 split()등의 방법으로 개행문자를 없애거나 무시해야 합니다.
코드
import sys
def push():
li.append(inp.split()[1])
def pop():
if len(li):
print(li.pop())
else:
print(-1)
def size():
print(len(li))
def empty():
if len(li):
print(0)
else:
print(1)
def top():
if len(li):
print(li[-1])
else:
print(-1)
def switch(command):
func = {'pop': pop, "size": size, "empty": empty, "top": top}.get(command, push)
func()
N = int(sys.stdin.readline())
li = []
for _ in range(N):
inp = sys.stdin.readline().strip()
switch(inp)
위의 코드는 가장 빠른 코드는 아니지만 C언어의 switch를 제 나름 구현한 결과입니다.
제가 쓴 가장 빠른 코드는 다음과 같습니다.
from sys import stdin
N = int(stdin.readline())
li = []
for _ in range(N):
inp = stdin.readline().split()
inp_command = inp[0]
if inp_command == "push":
li.append(inp[1])
elif inp_command == "pop":
if len(li):
print(li.pop())
else:
print(-1)
elif inp_command == "size":
print(len(li))
elif inp_command == "empty":
if len(li):
print(0)
else:
print(1)
elif inp_command == "top":
if len(li):
print(li[-1])
else:
print(-1)
'알고리즘 공부 > 백준' 카테고리의 다른 글
1406 에디터 by C++ (0) | 2022.07.03 |
---|---|
1874 스택 수열 by C++ (0) | 2022.07.03 |
9012 괄호 by C++ (0) | 2022.07.02 |
9093 단어 뒤집기 by C++ (0) | 2022.07.02 |
백준 9093번 단어 뒤집기 파이썬 (0) | 2022.05.04 |