현제의 현재이야기

[백준/python] 1021 - 회전하는 큐 본문

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)

 

덱을 활용하는 문제, 덱에 친해질 수 있는 문제였다.

| 알고리즘

  1. target 리스트를 덱으로 받고 전체 1~n까지도 덱으로 만든다.
  2. target 안의 수가 0이 될 때까지 반복
  3. 만약 all 덱의 0번째가가 target 덱의 0번째와 같다면

두 덱 모두 leftpop 해서 삭제

  1. 만약 target[0]이 all에 전체의 2분의 1보다 작으면

왼쪽 로테이트

  1. 아니면 오른 쪽 로테이트
Comments