개발자/알고리즘

[백준] 10828번 (feat. input()과 sys.stdin.readline()의 차이)

june__kim 2022. 1. 12. 09:06

[백준] 10828번 (feat. input()과 sys.stdin.readline()의 차이)

 

 

 

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

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()을 애용해서 사용해야겠따!

 

 

-끝-