알고리즘/알고리즘문풀

BOJ - 프린터 큐 1965번 (python)

developer-ellen 2021. 9. 25. 15:51

❓ 문제 - 백준 프린터 큐 1965번 - python 풀이법

출처 

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

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

 

📝 문제해결법

1. 이 문제의 핵심은 Queue를 이용하는 것이다.

  • 우선 테스트케이스 안에서 queue에 넣을 숫자가 1개라면 1을 출력
  • 만약 테스트케이스 안에서 queue에 넣을 숫자가 여러 개라면 queue에 해당 숫자의 중요도와 인덱스를 append
  • queue가 빌 때까지 while문을 돌면서 queue에서 중요도랑 index를 popleft하고 queue에 남은 숫자들 중에 중요도의 최대값을 찾아서 queue에서 popleft한 중요도가 더 크거나 같다면 만약 index가 빠져나간 순서가 궁금한 index와 동일한지 살피고 동일하다면 count 출력하고 break, 동일하지 않다면 count를 1 증가
  •  queue에 남은 숫자들 중에 중요도의 최대값을 찾아서 queue에서 popleft한 중요도가 더 큰지 비교해서 만약 queue에서 popleft한 중요다가 더 작다면 다시 queue에 중요도와 index를 넣어줌

 

💻 소스코드

from collections import deque

for tc in range(int(input())):
    n, m = map(int, input().split())
    if n == 1:
        data = int(input())
        print(1)
    else:
        data = list(map(int, input().split()))
        queue = deque()
        for d in range(len(data)):
            queue.append((data[d], d))
        count = 1
        while queue:
            d, index = queue.popleft()
            max_value = 0
            for k in range(len(queue)):
                max_value = max(queue[k][0], max_value)
            if d >= max_value:
                if index == m:
                    what = True
                    print(count)
                    break
                else:
                    count += 1
            else:
                queue.append((d, index))

 

 

 

🧐 Ellen's Thinking

n의 범위가 1<=n<=10 였기때문에 최대값으로 해결할 수 있었다.