알고리즘

백준 1021번 : 회전하는 큐 (Python)

jenyy 2021. 2. 3. 20:59

 

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

 

1021번: 회전하는 큐

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

www.acmicpc.net

풀이방법: 뽑아내려고 하는 숫자를 차례로 꺼내서 큐의 첫번째 원소가 될때까지 왼쪽이나 오른쪽으로 이동시킨다. 이때 data.index(num) <= len(data)//2를 만족하면 왼쪽으로 이동시키고 반대의 경우 오른쪽으로 이동시켜야 이동횟수를 최소화 시킬 수 있다. 

from collections import deque

n,m = map(int,input().split())
# deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 이런식으로 큐를 표현한다.
data = deque([i for i in range(1,n+1)])
#뽑아내려고 하는 수의 위치가 index변수에 순서대로 담아있다.
index = list(map(int,input().split()))

count = 0
for num in index:
    while 1:
        if data[0] == num:
            data.popleft()
            break
        else:
            if data.index(num) <= len(data)//2:
                data.rotate(-1)
                count += 1
            else:
                data.rotate(1)
                count += 1

print(count)