[Python] 알고리즘/Silver

[1021] 회전하는 큐 (Python)

-Becca- 2021. 12. 21. 16:22

[문제]

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

 

1021번: 회전하는 큐

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

www.acmicpc.net


알고리즘 분류는 자료 구조, 덱 입니다.

deque의 위치를 이용하여 왼쪽으로 이동시킬지, 오른쪽으로 이동시킬지 정할 수 있습니다.


[코드]

import sys
from collections import deque

N, M = map(int, sys.stdin.readline().split())
dq = deque(_ for _ in range(1, N + 1))
pop_li = list(map(int, sys.stdin.readline().split()))

cnt = 0
res_cnt = 0
while len(pop_li) != res_cnt:
    if dq[0] == pop_li[res_cnt]:
        dq.popleft()
        res_cnt += 1
    else:
        if dq.index(pop_li[res_cnt]) <= ((N - res_cnt) // 2):
            dq.append(dq.popleft())
            cnt += 1
        else:
            dq.appendleft(dq.pop())
            cnt += 1

print(cnt)