문제
https://www.acmicpc.net/problem/10828
풀이
n = int(input())
stack = [];
for _ in range(n):
order = input().split()
if order[0] == 'push':
stack.append(order[1])
elif order[0] == 'size':
print(len(stack))
elif order[0] == 'pop':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
stack.pop()
elif order[0] == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
elif order[0] == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
위와 같은 코드로 제출했더니 시간 초과가 나왔다.
📌 찾아보니 반복문으로 여러 줄을 입력받는 상황에서는 sys.stdin.readline()을 사용해야 시간초과가 발생하지 않는 것을 알았다.
sys.stdin.readline()을 사용하면 개행문자(\n)가 같이 입력받아지는 점을 고려해야 한다.
입력값은 문자열 형태로 저장되고, 만약 map(int, sys.stdin.readline().split())식으로 형변환을 거치면 개행문자가 제거된다.
[참고]
import sys
n = int(input())
stack = [];
for _ in range(n):
order = sys.stdin.readline().split()
operator = order[0]
if operator == 'push':
stack.append(int(order[1]))
elif operator == 'size':
print(len(stack))
elif operator == 'pop':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
stack.pop()
elif operator == 'top':
if len(stack) == 0:
print(-1)
else:
print(stack[-1])
elif operator == 'empty':
if len(stack) == 0:
print(1)
else:
print(0)
input()을 sys.stdin.readline()로 바꿔주고 통과했다.
import sys
n = int(input())
stack = [];
for _ in range(n):
order = sys.stdin.readline().rstrip()
if order == 'size':
print(len(stack))
elif order == 'pop':
print(stack.pop() if stack else -1)
elif order == 'top':
print(stack[-1] if stack else -1)
elif order == 'empty':
print(0 if stack else 1)
else:
_, x = order.split()
stack.append(int(x))
너무 길고 지저분한 코드를 다른 사람의 코드를 참고해 수정했다.
시간이 좀 더 빨라졌다.
참고
백준
'Algorithms > 코테 문풀' 카테고리의 다른 글
[백준 2869번] 달팽이는 올라가고 싶다.. (0) | 2023.08.17 |
---|---|
[백준 9093번] 단어 뒤집기 (0) | 2023.08.13 |
[백준 2475번] 검증수 (0) | 2023.08.12 |
백준[10250번] ACM 호텔 (0) | 2023.08.12 |
엘리스 - 문자열 앞뒤 검사하기(py), Palindrome (0) | 2023.07.18 |