[백준] 10828번 (feat. input()과 sys.stdin.readline()의 차이)
https://www.acmicpc.net/problem/10828
import sys
class Stack:
def __init__(self):
self.stack = []
def isEmpty(self):
if len(self.stack) == 0:
return 1
return 0
def push(self, num):
self.stack.append(num)
def size(self):
return (len(self.stack))
def top(self):
if len(self.stack) == 0:
return -1
return self.stack[-1]
def Pop(self):
if len(self.stack) == 0:
return -1
return self.stack.pop()
stack = Stack()
num = int(input())
for i in range(num):
line = sys.stdin.readline().split()
if line[0] == "push":
stack.push(line[1])
elif line[0] == "size":
print(stack.size())
elif line[0] == "empty":
print(stack.isEmpty())
elif line[0] == "top":
print(stack.top())
elif line[0] == "pop":
print(stack.Pop())
오랜만에 알고리즘을 풀어서 정신이 하나도 없네;;
이 문제에서 정리해볼 점은, input()과 sys.stdin.readline()의 차이점이다.
시간초과 때문에 일단 sys.stdin.readline()을 사용했는데 사실 이게 어떻게 동작하는 지 잘 몰랐다.
여러 블로그들을 찾아보면서 알게 된 input()이 느린 이유 2가지.
1. input()은 prompt message를 받을 수 있다! 그리고 이게 시간 delay를 초래할 수 있다.
prompt message가 뭐지? 싶었는데 이거인 것 같다.
line = input("Write the message: ")
이 input안에 넣을 수 있는 message.
이게 있건 없건, 약간의 delay를 초래할 수 있다는 게 첫 번째 이유이다.
2. input()에서는 "\n"(개행)을 처리해준다.
import sys
line1 = sys.stdin.readline()
line2 = input()
print(line1)
print(line2)
출력의 결과가 이렇게 나온 것을 보니, sys.stdin.readline()은 개행이 포함되어 나온다.
하지만 input()은 개행을 알아서 지워서 반환한다.
이 부분에서도 시간 delay가 생길 수 있다는 게 두 번째 이유이다.
음... 잘 모르겠고,
여러 줄을 읽을 때는 sys.stdin.readline()을 애용해서 사용해야겠따!
-끝-
'개발자 > 알고리즘' 카테고리의 다른 글
[백준] 13300번 (feat. 2차원 배열) (0) | 2022.01.15 |
---|---|
[백준] 3273 (feat. 집합 set) (0) | 2022.01.15 |
[백준] 10808 (feat. 파이썬 문자의 아스키코드) (0) | 2022.01.15 |
[백준] 1406번 (feat. reverse와 reversed의 차이점) (0) | 2022.01.12 |
[백준] 1874번 R (0) | 2022.01.12 |