문제 출처: https://www.acmicpc.net/problem/1021
Silver 4
원형큐인걸 알고 덱을 사용하면 되겠다 싶었다. 근데 C++스럽게 푸니깐 이상하게 파이썬은 대입된 원래 deque도 데이터 변경이 같이 되서 이게 뭔가.. 싶었다. 그래서 Python 다른 풀이를 참고했고 rotate 내장함수가 있다는 걸 알고 이를 이용했다
deque 길이을 반으로 나눠 pop하고자 하는 value의 index값을 비교한다. 이게 작고 크고로 나눠 rotate를 했고 주석을 참고하면 된다!
from collections import deque
import sys
if __name__ == '__main__':
N,M = map(int,input().split())
if N == 0:
print(0)
sys.exit()
numbers = list(map(int, input().split()))
dq = deque(range(1, N + 1))
result = 0
for i in range(len(numbers)):
if numbers[i] == dq[0]:
dq.popleft()
continue
dq_idx = dq.index(numbers[i])
if dq_idx > len(dq) // 2:
# 시계
dq.rotate(len(dq) - dq_idx)
result += (len(dq) - dq_idx)
elif dq_idx <= len(dq) // 2:
# 반시게
dq.rotate(-dq_idx)
result += dq_idx
dq.popleft()
print(result)