BOJ(백준) 1021번 회전하는 큐 파이썬

2021. 3. 19. 14:56개인 공부 공간/Algorithm

 

1021번: 회전하는 큐

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

www.acmicpc.net


코드

import sys
r = sys.stdin.readline
N,M = map(int,r().split())
l = list(map(int,r().split()))
que = list(range(1,N+1))
cnt = 0
for i in l:
    if que[0] == i:
        que.pop(0)
    else:
        k = que.index(i)
        if k <= len(que)//2:
            cnt += k
        else:
            cnt += len(que) - k
        que = que[(k+1):] + que[:(k+1)]
        que.pop()
print(cnt)

 

 

해설

문제에서 주어진 2번 연산과 3번 연산이 실제로 몇번 이루어지는가를 확인하기 위해 리스트 que [1,2,3, ,,, ,N]를 생성하였다. 그 후 index 를 이용해 첫 번째 칸으로 이동하기 위해 2번 연산과 3번 연산 중 어떤 연산이 더 효율적인지 확인 후 그 횟수만큼 cnt 를 더해주었다. 그리고 나서 이와 맞게 que 리스트를 슬라이싱을 이용해 내부 순서를 바꿔 주었다.

 

결과

회전하는큐결과.PNG

출처: https://privatedevelopnote.tistory.com/81 [개인노트]