본문 바로가기

Programming [Python]/백준 알고리즘 솔루션

#111 백준 파이썬 [1966] 프린터 큐

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

 

 

#Solution

다음과 같은 알고리즘을 통해 파악할 수 있다.

 

1) prior_number에 모든 수를 넣어서 우선 순위 maximum 숫자를 확인할 때 쓴다. max(prior_number)

2) 큐 안에 N만큼의 index를 넣는다.

3) sequence로 해당 숫자가 몇 번째로 꺼내지는 지를 표시한다.

4-1-1) 큐의 맨 처음 index에 해당하는 printer_list의 숫자가 우선 순위가 가장 높다면 이를 result에 담는다.

4-1-2) prior_number에서 가장 큰 수를 하나 지워준다.

4-2)  else: 가장 높은 우선순위가 아니라면 큐 첫번째를 큐의 가장 뒷부분으로 다시 보낸다.

4-3) 반복한다.

case = int(input())

for _ in range(case):
    N, M = map(int, input().split())
    print_list = list(map(int, input().split()))
    prior_number = []
    
    #우선 순위를 탐색하기 위한 리스트
    for doc in print_list:
        prior_number.append(doc)
    
    #큐 안에 index를 넣어 탐색
    result = [0 for _ in range(N)]
    queue = [i for i in range(N)]
    sequence = 1
    while queue:
        if print_list[queue[0]] == max(prior_number):
            prior_number.remove(max(prior_number))
            result[queue.pop(0)] = sequence
            sequence += 1
        else:
            queue.append(queue.pop(0))              
    print(result[M])