상상쓰

[백준] 회전하는 큐 본문

Coding Test

[백준] 회전하는 큐

상상쓰 2022. 4. 11. 23:49

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

 

1021번: 회전하는 큐

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

www.acmicpc.net

 

N이 50 이하의 자연수라 부담 없이 deque를 이용하여 풀었다.

2번을 이용하든 3번을 이용하든 숫자의 순서가 변하지는 않는다. 그러므로 P의 각 숫자를 뽑을 때 최솟값을 다 더해주면 된다.

2번 연산을 기준으로 숫자를 뽑았을 때 연산의 횟수를 x 라고 한다면 3번 연산의 방법을 이용한 연산의 횟수는 N-x 가 된다.

 

import sys
from collections import deque

N, M = map(int, sys.stdin.readline().split())
P = list(map(int, sys.stdin.readline().split()))
A = deque([i+1 for i in range(N)])
answer = 0

for i in P:
    a = A.popleft()
    cnt = 0
    
    while i != a:
        A.append(a)
        cnt += 1
        a = A.popleft()
    
    answer += min(N-cnt, cnt)
    N -= 1

print(answer)

'Coding Test' 카테고리의 다른 글

[백준] 감소하는 수  (0) 2022.04.03
[백준] 동전 0  (0) 2022.03.29
[프로그래머스] 파괴되지 않은 건물  (0) 2022.03.24
[백준] 카드 섞기  (0) 2022.03.05
[백준] 숫자고르기  (0) 2022.02.27
Comments