먼저 회전한다는 개념이 결국 왼쪽으로 원소를 뽑아 오른쪽에 삽입, 오른쪽의 원소를 뽑아 왼쪽에 삽입을 해야한다는 뜻이고 이는 양방향 큐인 데큐(deque)를 이용해서 쉽게 구현할 수가 있을 것이라고 생각했다. 따라서 다음과 같은 과정을 거쳐 회전을 시키고 첫 번째 원소를 뽑아내는 과정을 반복한다.
이 때 회전시킬 때마다 카운트 값을 증가시키면 된다.
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int, input().split())
pos = list(map(int, input().split()))
dq = deque(range(1, n + 1))
cnt = 0
for i in pos:
while True:
# 맨앞에 원하는 위치의 수가 있으면 popleft
if dq[0] == i:
dq.popleft()
break
else:
# 앞쪽에 더 가깝다면 2번 방법 사용
if dq.index(i) < len(dq) / 2:
while dq[0] != i:
# 첫번째 자리에 올 때까지 2번 방법 사용
dq.append(dq.popleft())
cnt += 1
# 뒤쪽에 더 가깝다면 3번 방법 사용
else:
while dq[0] != i:
# 첫번째 자리에 올 때까지 3번 방법 사용
dq.appendleft(dq.pop())
cnt += 1
print(cnt)