import sys
input=sys.stdin.readline
# 반복 횟수를 입력받는다
n = int(input())
# 명령어를 저장할 list 생성
commendList = []
# 명령으로 인해 발생한 변수를 저장할 stacklist 생성
stack = []
# 입력한 n의 값만큼 반복문 실행
for i in range(n):
# commendList에 명령어 입력
commendList.append(input().split())
# 만약 push 명령어가 commendList[i] 에 속해있다면
if "push" in commendList[i]:
# stack 리스트에 push와 함께 입력된 숫자를 append
stack.append(int(commendList[i][-1]))
# 만약 pop 명령어가 commendList[i] 에 속해있다면
elif "pop" in commendList[i]:
# stack.pop() 명령어를 실행 후 에러가 발생한다면 print(-1) 이 출력되도록 예외처리
try:
print(stack.pop())
except:
print(-1)
# 만약 size 명령어가 commendList[i] 에 속해있다면
elif "size" in commendList[i]:
# stack 리스트의 길이를 출력한다
print(len(stack))
# 만약 empty 명령어가 commendList[i] 에 속해있다면
elif "empty" in commendList[i]:
# stack 의 길이가 0이 아니면 print(0) stack 의 길이가 0이라면 print(1)
if len(stack) != 0:
print(0)
else:
print(1)
# 만약 top 명령어가 commendList[i] 에 속해있다면
elif "top" in commendList[i]:
# stack 리스트의 마지막 요소를 print. 만약 리스트가 비어있다면 print(-1)
try:
print(stack[-1])
except:
print(-1)
맨 처음 improt sys
input = sys.stdin.readline을 안쓰면 시간초과가 발생한다.
왜 그런가 쥐피티 선생에게 물어보니
파이썬에서 기본 input() 함수는 사용자로부터 입력을 받을 때마다 내부적으로 많은 작업을 수행합니다. 각 입력마다 버퍼링(buffering), 문자열 파싱(parsing), 형변환(type conversion) 등의 작업을 수행하는데, 이는 상대적으로 느린 작업이며, 반복적으로 사용될 경우 성능 문제를 야기할 수 있습니다.
반면, sys.stdin.readline() 함수는 내부적으로 버퍼링을 사용하여 입력을 한번에 받아온 후에 개행 문자까지 한번에 처리합니다. 이로 인해 input() 함수보다 상대적으로 빠르게 입력을 처리할 수 있습니다.
또한, sys.stdin.readline() 함수는 문자열로 입력을 받기 때문에, 입력값이 숫자인 경우에는 따로 형변환을 수행하지 않아도 됩니다. 이로 인해 형변환으로 인한 오버헤드를 줄일 수 있습니다.
따라서, 반복적으로 입력을 받는 경우나 입력 속도가 중요한 경우에는 sys.stdin.readline() 함수를 사용하는 것이 더욱 효율적입니다.
라고 하신다.
CS 지식이 부족하여 완벽하게 이해하진 못했지만 input 명령어의 내부작업을 생략하고 문자열을 입력받아 훨씬 빠른 작업이 가능하다는 뜻 같다.
'코딩딩 > BOJ' 카테고리의 다른 글
[백준 10845번] 문제풀이 (1) | 2023.05.16 |
---|---|
[백준 1874] 문제풀이 (0) | 2023.05.15 |
[백준 2501번] 문제풀이 (1) | 2023.05.14 |
[백준 5086번] 문제풀이 (0) | 2023.05.13 |
[백준 10757번] 문제풀이 (0) | 2023.05.13 |