[백준 1966] 프린터 큐

코뉴·2021년 8월 6일
0

백준🍳

목록 보기
41/149
post-custom-banner

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

🥚문제


🥚입력/출력


🍳코드

import sys
from collections import deque

input = sys.stdin.readline

t = int(input())
for _ in range(t):
    n, m = map(int, input().split())
    tmp_list = list(map(int, input().split()))
    deq = deque()

    for i in range(n):
        # (중요도, 원래idx) tuple의 형태로 저장한다
        deq.append((tmp_list[i], i))

    # 몇 번째로 인쇄되는지를 저장하는 변수 count
    count = 0

    # 항상 가장 앞에 있는 요소의 중요도보다 높은 것이 있는지 순회하며 확인
    while len(deq) > 0:
        max_important = deq[0]
        # rotate 한다면 얼마나 돌려야하는지를 저장하는 변수 rate
        rate = 0
        if len(deq) > 1:
            for i in range(1, len(deq)):
                if max_important[0] < deq[i][0]:
                    max_important = deq[i]
                    # 중요도가 최대인 요소의 "현재" idx를 저장한다
                    rate = i

        # deq를 rate만큼 왼쪽으로 회전하여 중요도가 최대인 요소가 가장 앞에 오게 한다
        deq.rotate(-rate)

        # max_important인 요소를 popleft한다
        popped = deq.popleft()

        # count를 증가한다
        count += 1

        # popleft한 요소의 tuple에 저장된 원래 idx가
        # 우리가 찾고 있는 m과 동일하다면, count를 출력 뒤 반복 중지
        if popped[1] == m:
            print(count)
            break

🧂아이디어

  • 이것도 deque로 풀렸다!
  • 문제 번호가 끝 두자리가 ...66으로 끝나면 deque로 풀 수 있는 문제인건가
  • 다른 더 좋은 접근법이 있는지 알아봐야겠다.
profile
코뉴의 도딩기록
post-custom-banner

0개의 댓글