Problem Solving/Deque

백준 1021: 회전하는 큐 - 덱(Deque)

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

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가

www.acmicpc.net

python의 deque를 사용하면 쉽게 풀리는 문제입니다.

뽑고자 하는 숫자가 앞에서 더 가까운지 뒤에서 더 가까운지 확인한 후 rotate시킵니다.(같다면 해당 숫자를 왼쪽으로 이동시킵니다. 오른쪽으로 이동시킬 경우 맨 뒤에서 맨 앞으로 이동시켜야되는 과정이 추가로 붙기 때문)

from sys import stdin
from collections import deque
input = stdin.readline

n, num_of_pop = map(int, input().split())
want_to_pop = list(map(int, input().split()))
q = deque([ii for ii in range(1, n+1)])
count = 0

for ww in want_to_pop:
    target_index = q.index(ww)
    rotate_direction = -1 if target_index <= len(q) - target_index else 1
    while q[0] != ww:
        q.rotate(rotate_direction)
        count += 1
    q.popleft()

print(count)