문제 링크
1021번: 회전하는 큐
첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가
www.acmicpc.net
문제 풀이
- 큐의 맨 앞의 숫자가 현재 뽑고자 하는 숫자가 일치할 때까지 큐를 왼쪽, 오른쪽으로 돌려야(rotate) 한다.
- 만약 큐의 맨 앞의 숫자가 일치한다면 큐를 제거하고(popleft), 그렇지 않다면 어느 방향으로 돌릴 것인지를 정해야 한다.
- 이때, 뽑고자 하는 숫자의 위치가 중간 위치랑 같거나 작다면 왼쪽으로 로테이션하고, 그보다 크다면 오른쪽으로 로테이션을 해야 값이 최소가 된다.
전체 코드
import sys
from collections import deque
n, m = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
queue = deque([x for x in range(1, n+1)])
count = 0
for i in arr:
k = queue.index(i)
mid = len(queue) // 2
while True:
if queue[0] == i:
queue.popleft()
break
else:
if k <= mid:
while queue[0] != i:
queue.rotate(-1)
count += 1
else:
while queue[0] != i:
queue.rotate(1)
count += 1
print(count)
반응형
'Coding Test > BOJ' 카테고리의 다른 글
[백준/Python] 2225 합분해 (0) | 2024.03.12 |
---|---|
[백준/Python] 13023 ABCDE (0) | 2024.03.07 |
[백준/Python] 16564 히오스 프로게이머 (0) | 2024.02.24 |
[백준/Python] 2589 보물섬 (0) | 2024.02.23 |
[백준/Python] 13164 행복 유치원 (0) | 2024.02.22 |