문제 링크
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)