문제풀이 GitHub
https://github.com/Seokii/baekjoon
GitHub - Seokii/baekjoon: Daily Commit for Baekjoon
Daily Commit for Baekjoon. Contribute to Seokii/baekjoon development by creating an account on GitHub.
github.com
문제링크
https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
풀이(시간 초과)
from collections import deque
n = int(input())
dq = deque()
for _ in range(n):
command = list(input().split())
if command[0] == 'push':
dq.append(command[1])
elif command[0] == 'pop':
if len(dq) > 0 :
tmp = dq.popleft()
print(tmp)
else : print(-1)
elif command[0] == 'size':
print(len(dq))
elif command[0] == 'empty':
if len(dq) > 0: print(0)
else : print(1)
elif command[0] == 'front':
if len(dq) > 0: print(dq[0])
else : print(-1)
elif command[0] == 'back':
if len(dq) > 0: print(dq[-1])
else: print(-1)
파이썬에서는 dque 라이브러리를 통해 간단하게 큐를 구현할 수 있습니다.
.pop(), .append() 뿐만 아니라 .popleft(), appendleft(), reverse() 등을 사용해 쉽게 구현할 수 있습니다.
이 함수들을 통해 조건문을 작성했습니다.
풀이는 맞지만 시간 초과가 발생했습니다.
for문을 반복하면서 명령을 여러 줄 받기 때문에 입력 받는 시간을 줄일 필요가 있었습니다.
풀이(정답)
from collections import deque
import sys
input = sys.stdin.readline
n = int(input())
dq = deque()
for _ in range(n):
command = list(input().split())
if command[0] == 'push':
dq.append(command[1])
elif command[0] == 'pop':
if len(dq) > 0 :
tmp = dq.popleft()
print(tmp)
else : print(-1)
elif command[0] == 'size':
print(len(dq))
elif command[0] == 'empty':
if len(dq) > 0: print(0)
else : print(1)
elif command[0] == 'front':
if len(dq) > 0: print(dq[0])
else : print(-1)
elif command[0] == 'back':
if len(dq) > 0: print(dq[-1])
else: print(-1)
입력을 받을 때 sys라이브러를 불러와
sys.stdin.readline()을 통해 입력 받을 때의 시간을 최대한 줄였습니다.
input 대신에 sys.stdin.readline을 집어넣어 코드를 수정해 정답을 맞췄습니다.

댓글