현제의 현재이야기
[백준/python] 1021 - 회전하는 큐 본문
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보다 작으면
왼쪽 로테이트
- 아니면 오른 쪽 로테이트
'algorithm' 카테고리의 다른 글
[백준/python] 17827 - 달팽이리스트 (0) | 2022.06.25 |
---|---|
[백준/python] 11866 - 요세푸스 문제 (0) | 2022.06.25 |
[백준/python] 11501 - 주식 다국어 (0) | 2022.06.25 |
[백준/python] 2003 - 수들의 합 2 (0) | 2022.06.25 |
[백준/python] 2531 - 회전 초밥 (0) | 2022.06.25 |
Comments