본문 바로가기
알고리즘/구현

[백준][python] 1021 회전하는 큐

by 성현0409 2022. 3. 10.

문제

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

 

1021번: 회전하는 큐

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

www.acmicpc.net

결과

풀이

import collections

n, m = map(int, input().split())
l = list(map(int, input().split()))
q = collections.deque(list(range(1, n+1)))
answer = 0

for i in l:
    while True:
        if q[0] == i:
            q.popleft()
            break
        elif q.index(i) <= len(q)//2:
            while q[0] != i:
                q.append(q.popleft())
                answer += 1

        else:
            while q[0] != i:
                q.insert(0, q.pop())
                answer += 1

print(answer)

 덱을 써서 푸는 문제이다. 남아있는 deque의 length와 추출하고자 하는 숫자의 index를 비교하여 deque를 왼쪽으로 이동할지 오른쪽으로 이동할지 정하고 이를 반복한다.