꾸준히 합시다
백준 파이썬 18258번: 큐 2 본문
18258번: 큐 2
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
문제 유형: 자료 구조, 큐
# Solution 1 - 시간 초과
import sys
input = sys.stdin.readline
arr = []
for _ in range(int(input())):
cmd = list(map(str, input().split()))
if cmd[0] == "push":
arr.append(int(cmd[1]))
elif cmd[0] == "pop":
if arr:
print(arr.pop(0))
else:
print(-1)
elif cmd[0] == "size":
print(len(arr))
elif cmd[0] == "empty":
if arr:
print(0)
else:
print(1)
elif cmd[0] == "front":
if arr:
print(arr[0])
else:
print(-1)
elif cmd[0] == "back":
if arr:
print(arr[-1])
else:
print(-1)
# Solution 2
import sys
from collections import deque
input = sys.stdin.readline
arr = deque()
for _ in range(int(input())):
cmd = list(map(str, input().split()))
if cmd[0] == "push":
arr.append(int(cmd[1]))
elif cmd[0] == "pop":
if arr:
print(arr.popleft())
else:
print(-1)
elif cmd[0] == "size":
print(len(arr))
elif cmd[0] == "empty":
if arr:
print(0)
else:
print(1)
elif cmd[0] == "front":
if arr:
print(arr[0])
else:
print(-1)
elif cmd[0] == "back":
if arr:
print(arr[-1])
else:
print(-1)
deque를 사용하지 않고 풀었더니 시간 초과가 떴다. deque로 구현하여 popleft() 함수로 pop()을 대체하고, 혹시 몰라 PyPy3로 제출하였더니 통과되었다.
'코딩 테스트 문제 풀이' 카테고리의 다른 글
백준 파이썬 10798번: 세로읽기 (0) | 2021.03.16 |
---|---|
백준 파이썬 1032번: 명령 프롬프트 (0) | 2021.03.15 |
백준 파이썬 1157번: 단어 공부 (0) | 2021.03.11 |
백준 파이썬 9506번: 약수들의 합 (0) | 2021.03.10 |
백준 파이썬 9012번: 괄호 (0) | 2021.03.10 |
Comments