본문 바로가기

Programming [Python]/백준 알고리즘 솔루션

#94 백준 파이썬 [1021] 회전하는 큐 - 덱

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

 

#Solution

이 문제는 큐지만 사실 덱으로 풀어야하는 것이나 다름 없다. 라이브러리는 collections의 deque를 사용한다.

index모듈을 사용해서 위치를 확인 후 queue 전체 크기보다 작은지 큰지를 결정한 후 왼쪽/오른쪽 로테이션 방향을 정한다.

rotation을 얼마나 하느냐를 출력해주면 된다.

import collections

max_num, target_num = map(int, input().split())
target_list = list(map(int, input().split()))
que = collections.deque([i for i in range(1, max_num +1)])
result = 0

for num in target_list:
    if num == que[0]:
        que.popleft()
        continue
    left_move = que.index(num)
    right_move = len(que) - left_move
    
    if left_move <= right_move:
        que.rotate(-left_move)
        que.popleft()
        result += left_move
    else:
        que.rotate(right_move)
        que.popleft() 
        result += right_move
        
print(result)