문제
해결과정
rotate
몰랐으면 오래걸렸을 듯..
i
가 m
이랑 다르다면 while
문을 돈다.
- 큐 맨 앞 값이 찾는 위치라면 pop
- 아니라면 오른쪽으로 회전할지, 왼쪽으로 회전할지 확인한다.
- 둘 중 가장 최소로 회전하는 쪽으로 회전
- 회전 횟수만큼 cnt에 더 해준다.
덱 문법
- deque은 스택과 큐의 기능을 가진 객체로 출입구를 양쪽으로 가지고 있음
- 스택처럼 써도 되고, 큐처럼 써도 됨
from collections import deque
dq = deque('python')
print(dq)
dq.append('x')
print(dq)
print(dq.pop())
print(dq)
dq.appendleft('A')
print(dq)
print(dq.popleft())
print(dq)
dq.extend('TEST')
print(dq)
dq.extendleft('coding')
print(dq)
dq = deque('Good')
dq.insert(4,'s')
print(dq)
dq.remove('s')
print(dq)
dq.reverse()
print(dq)
dq = deque([1,2,3,4,5])
dq.rotate(2)
print(list(dq))
dq.rotate(-2)
print(list(dq))
풀이
from collections import deque
import sys
n,m = map(int, sys.stdin.readline().split())
position = list(map(int,sys.stdin.readline().split()))
q = deque([i for i in range(1,n+1)])
cnt = 0
i = 0
while i != m:
if q[0] == position[i]:
q.popleft()
i += 1
else:
Rlen = len(q) - q.index(position[i])
Llen = q.index(position[i])
if Rlen > Llen:
q.rotate(-Llen)
cnt += Llen
q = q
else:
q.rotate(Rlen)
cnt += Rlen
q = q
print(cnt)