안녕하세요. 오늘은 백준 알고리즘 1966번 프린터 큐를 풀어보았습니다.

 

먼저 입/출력을 받을 변수와 대략적인 코드 진행의 가이드라인을 그려보겠습니다.

 

입력 : 테스트케이스의 수, 문서의 개수, 원하는 문서의 인덱스, 중요도

출력 : 원하는 문서의 인쇄 순서

 

대략 2~3가지의 해결 방법이 떠오르는데, 이번 풀이에서는 우선순위를 리스트에 저장 해두었다가

중요도를 비교하여 제일 높은 중요도일 경우 추가하고, 아닐 경우 맨 뒤로 보내는 방법으로 풀이해보겠습니다.

 

priority 리스트에 우선순위를 입력하고

queue 덱에 원하는 문서의 인덱스, 그 문서의 우선순위를 튜플로 삽입합니다.

 

그 뒤 반복을 통해 현재 큐의 우선순위가 제일 높은 우선순위일 경우:

우선순위 리스트 priority에서 현재 우선순위를 제거해줍니다.

 

현재 큐의 우선순위가 제일 높은 우선순위가 아닐 경우:

queue의 맨 뒤에 현재 큐를 추가하고

현재 큐를 삭제시켜줍니다.

 

이렇게 priority가 빌 때 까지 연산을 반복하면 원하는 결과가 정렬되겠습니다.

 

그 후 queue에서 원하는 인덱스를 찾아 출력해주면 끝입니다.

 

<풀이 코드>

from collections import deque
import sys
loop = int(sys.stdin.readline())
for _ in range(loop):
    doc_count, index = map(int, sys.stdin.readline().split())
    priority = list(map(int, sys.stdin.readline().split()))
    queue = deque([(i, priority[i])for i in range(doc_count)])

    idx = 0
    while idx < doc_count:
        if queue[idx][1] == max(priority):
            priority.remove(queue[idx][1])
            idx += 1
        else:
            queue.append(queue[idx])
            queue.remove(queue[idx])

    for i in range(doc_count):
        if queue[i][0] == index:
            print(i + 1)
            break

What does not destroy me, makes me stronger. - Friedrich Nietzsche

 

아직 모자라지만, 항상 배우고, 나아가려합니다.

 

오타 / 오류 / 개선점 / 질문 환영합니다 ^^

+ Recent posts