algorithm
[백준/python] 1021 - 회전하는 큐
현재의 현제
2022. 6. 25. 15:25
from collections import deque
n, m = tuple(map(int, input().split()))
target = list(map(int, input().split()))
target = deque(target)
all = [
i + 1
for i in range(n)
]
all = deque(all)
cnt = 0
while len(target) != 0 :
if all[0] == target[0]:
all.popleft()
target.popleft()
elif all[0] != target[0] and all.index(target[0]) <= (len(all) // 2):
all.rotate(-1)
cnt += 1
elif all[0] != target[0] and all.index(target[0]) > (len(all) // 2):
all.rotate()
cnt += 1
print(cnt)
덱을 활용하는 문제, 덱에 친해질 수 있는 문제였다.
| 알고리즘
- target 리스트를 덱으로 받고 전체 1~n까지도 덱으로 만든다.
- target 안의 수가 0이 될 때까지 반복
- 만약 all 덱의 0번째가가 target 덱의 0번째와 같다면
두 덱 모두 leftpop 해서 삭제
- 만약 target[0]이 all에 전체의 2분의 1보다 작으면
왼쪽 로테이트
- 아니면 오른 쪽 로테이트