백준 1966 프린터 큐 - C#

김보근·2025년 7월 21일

백준

목록 보기
45/62

백준 1966 프린터 큐 - C#


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

문제를 읽고 헷갈렸던 점

  • 처음엔 인쇄되는 순서가 그냥 큐에서 몇 번째로 빠지는 순서인 줄 알았다.
    하지만 문제를 잘 읽어보니 우선순위가 높은 문서가 먼저 인쇄되고,
    그 과정에서 내가 찾고 싶은 문서가 몇 번째로 인쇄되는지를 묻는 문제였다.

문제 조건 요약

  • 문서는 중요도(priority)를 가지고 있음

  • 큐의 맨 앞에 있는 문서를 꺼낼 때
    → 더 높은 중요도의 문서가 있으면 → 다시 큐의 뒤로 보냄
    → 없으면 → 인쇄 (카운트 +1)

  • 내가 찾는 문서가 몇 번째로 인쇄되는지 출력

내가 생각한 풀이 방법

  • 문서 정보를 (중요도, 인덱스) 형태로 큐에 저장

  • 큐를 돌면서

    꺼낸 문서보다 더 높은 중요도의 문서가 있는지 확인
    
    더 높은 게 있으면 → 다시 큐 뒤로
    
    아니면 → 인쇄하고 카운트 증가
    
    그 문서가 내가 찾던 문서라면 → 카운트 출력

작성한 코드

using System;
using System.Collections.Generic;

namespace backjoon
{
    internal class Program
    {
        static void Main()
        {
            int testCase = int.Parse(Console.ReadLine());

            for (int t = 0; t < testCase; t++)
            {
                string[] input = Console.ReadLine().Split();
                int docCount = int.Parse(input[0]);
                int targetIndex = int.Parse(input[1]);

                string[] priorities = Console.ReadLine().Split();
                Queue<(int priority, int index)> queue = new Queue<(int, int)>();

                for (int i = 0; i < docCount; i++)
                {
                    queue.Enqueue((int.Parse(priorities[i]), i));
                }

                int printOrder = 0;

                while (queue.Count > 0)
                {
                    var current = queue.Dequeue();

                    bool hasHigher = false;
                    foreach (var item in queue)
                    {
                        if (item.priority > current.priority)
                        {
                            hasHigher = true;
                            break;
                        }
                    }

                    if (hasHigher)
                    {
                        queue.Enqueue(current);
                    }
                    else
                    {
                        printOrder++;
                        if (current.index == targetIndex)
                        {
                            Console.WriteLine(printOrder);
                            break;
                        }
                    }
                }
            }
        }
    }
}
 
profile
게임개발자꿈나무

0개의 댓글