알고리즘/백준

백준-1966-프린터 큐

hong2943 2024. 4. 29. 14:55

구현 코드

import sys

T = int(input())

for _ in range(T):
    a,b = map(int,sys.stdin.readline().split())
    pri = list(map(int,sys.stdin.readline().split()))

    temp = [i for i in range(a)] # 우선순위 관리 (0~a-1)

    count = 0 # 인쇄 카운트

    while True:
        if pri[0] == max(pri): #현재의 문서가 최고 우선순위를 가지면 프린트
            count += 1
            
            #찾는 우선순위가 프린트될 횟수 출력
            if temp[0] == b:
                print(count)
                break
            else:
                #현재 문서가 최고 우선순위이지만 내가 찾고있는 문서의 출력횟수가 아닌 경우, 그냥 출력한다.
                del pri[0]
                del temp[0] #하나가 출력되었기 때문에 우선순위 하나 차감
        else: # 현재 문서보다 우선순위가 높은 문서가 있다면 현재 문서를 리스트의 가장 뒤에 위치시킨다.
            pri.append(pri[0])
            del pri[0]
            temp.append(temp[0])
            del temp[0]

 

  • 딕셔너리 자료형을 따로 사용하지 않고, 우선순위 리스트, 우선순위를 입력받는 문서의 리스트 2개를 두어서 문제를 해결했다.
  • 이후 구현은 문제에 제시한 방법을 그대로 따랐다.
    1. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다.
    2. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다
  • 이들은 while True: 구문안에서 모두 표현을 했고 위와 같이 구현을 하게 되면 정답이 나오게 된다.

 

문제링크

'알고리즘 > 백준' 카테고리의 다른 글

백준-1914-하노이 탑  (0) 2024.04.30
백준-17413-단어뒤집기  (0) 2024.04.29
백준-11728-배열합치기  (0) 2024.04.12
백준-1181-단어정렬  (0) 2024.04.10
백준-11399-ATM  (0) 2024.04.10