BOJ 1021 - 회전하는 큐

folder_open Algorithm / BOJ / silver | date_range / created at

sell #BOJ #1021 #silver #python #파이썬 #코딩테스트 #알고리즘

문제 링크

https://www.acmicpc.net/problem/1021

구현

결국 문제가 요구하는 것은, 회전하는 방향을 잘 골라서, 최소로 회전시키라는 것이다. 어느 쪽으로 돌리는 것이 더 가까운지 먼저 계산해주고, 토대로 회전시키면 된다.

코드

from sys import stdin
from collections import deque
input = lambda : stdin.readline().strip()

n, m = map(int, input().split())
seq = deque(i for i in range(1, n + 1))
topop = list(map(int, input().split()))
count = 0
for num in topop:
    idx = 0
    while seq[idx % n] != num:
        idx += 1
    idx2 = 0
    while seq[-(idx2 % n)] != num:
        idx2 += 1
    if idx < idx2:
        seq.rotate(-idx)
        seq.popleft()
        count += idx
    else:
        seq.rotate(idx2)
        seq.popleft()
        count += idx2
print(count)