https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
문제
21.02.12 접근법
큐는 줄서기로, 먼저 들어온 것이 먼저 나간다.
때문에 popleft가 있는 deque을 사용해서 하는 것이 좋다고 판단
21.02.12 코드
import sys
from collections import deque
N=int(input())
queue=deque([])
for i in range(N):
comd=sys.stdin.readline().split()
if comd[0]=='push':
queue.append(int(comd[1]))
elif comd[0]=='pop':
if queue: print(queue.popleft())
else: print(-1)
elif comd[0]=='size':
print(len(queue))
elif comd[0]=='empty':
if queue: print(0)
else: print(1)
elif comd[0]=='front':
if queue: print(queue[0])
else: print(-1)
elif comd[0]=='back':
if queue: print(queue[-1])
else: print(-1)
21.07.20 접근법
deque(데크) 사용 : 왼쪽에서도 pop을 해야했기 때문에
deque가 list보다 시간복잡도가 나음.
같은 append,pop같은 경우 list의 경우 O(n)이지만, deque는 O(1)
2월에 한 코드와 비교해보니 2월엔 if-else문을 사용했고, 7월엔 try-except문 사용
시간 체크해보니 2월의 시간이 더 빨랐음.
결론; try-except문보단 if-else문을 사용하기!
21.07.20 코드
import sys
from collections import deque
deq=deque()
N=int(input())
for _ in range(N):
cmd=sys.stdin.readline().strip().split()
if cmd[0]=='push':
deq.append(int(cmd[1]))
elif cmd[0]=='pop':
try:
print(deq.popleft())
except:
print(-1)
elif cmd[0]=='size':
print(len(deq))
elif cmd[0]=='empty':
if deq:
print(0)
else:
print(1)
elif cmd[0]=='front':
try:
print(deq[0])
except:
print(-1)
elif cmd[0]=='back':
try:
print(deq[-1])
except:
print(-1)
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 10866번 덱 - Python(파이썬) (0) | 2021.07.22 |
---|---|
[백준] 1158번 요세푸스 문제 - Python(파이썬) (0) | 2021.07.22 |
[백준] 1406번 에디터 - Python(파이썬) (0) | 2021.07.22 |
[백준] 1874번 스택 수열 - Python(파이썬) (0) | 2021.07.22 |
[백준] 9012번 괄호 - Python(파이썬) (0) | 2021.07.21 |