C# 1966번 프린터 큐
2022. 2. 16. 00:27ㆍ코딩테스트 문제 풀이/[백준] 큐, 덱
728x90
반응형


코드 :
using System;
using System.Collections.Generic;
namespace _4
{
internal class Program
{
static void Main(string[] args)
{
int T = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < T; i++)
{
int[] NM = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
int[] priority = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
//M
int M = NM[1];
//문서 중요도 저장용 큐
Queue<int> priorityQ = new Queue<int>();
//문서 순서 저장용 큐
Queue<int> priorityIndex = new Queue<int>();
for (int j = 0; j < priority.Length; j++)
{
priorityQ.Enqueue(priority[j]);
priorityIndex.Enqueue(j);
}
//중요도 내림차순으로 정렬
Array.Sort(priority);
Array.Reverse(priority);
//몇번째로 인쇄됐는지 확인하기 위한 변수
int count = 0;
// 인쇄했을때 문서의 순서와 M이 같은지 확인하기 위한 변수
int index = -1;
//함수 실행
while(priorityQ.Count != 0)
{
//Peek()가 내림차순정렬된 배열의 인덱스 0인 값과 같지 않다는것은
//중요도가 가장 큰 문서가 아니라는 의미이므로
//다시 맨 뒤로 보낸다
if(priorityQ.Peek() != priority[NM[0] - priorityQ.Count])
{
priorityQ.Enqueue(priorityQ.Dequeue());
priorityIndex.Enqueue(priorityIndex.Dequeue());
}
//중요도와 배열의 값이 같으면
//중요도가 가장 큰 문서라는 의미 이므로
//데큐하고 인덱스를 저장하고
//count 한다.
else
{
priorityQ.Dequeue();
index=priorityIndex.Dequeue();
count++;
}
//NM[1] = M 이므로
//인덱스와 M이 같다는 말은
//내가 원하는 문서를 데큐 했다는 의미이므로
//count를 출력하고 더이상 반복분을 진행하지 않는다.
if(index == NM[1])
{
Console.WriteLine(count);
break;
}
}
}
}
}
}
풀이 :
문서를 담을 큐 하나, 문서의 인덱스를 담을 큐 하나, 문서의 중요도를 담을 배열하나를 생성한다.
중요도를 내림차순으로 정렬하고 배열[0]의 값과 문서와 같으면 그 문서는 중요도가 가장 높은 문서이므로 출력하고 COUNT++하고 아니면 PASS한다.
이런식으로 배열[0]과 같은 문서를 출력했다면 배열[1]과 같은 문서를 출력하고 출력한 문서의 중요도가 M과 같다면 이 과정을 멈춘다.
728x90
반응형
'코딩테스트 문제 풀이 > [백준] 큐, 덱' 카테고리의 다른 글
C# 11866번 요세푸스 문제 0 (0) | 2022.02.15 |
---|---|
C# 2164번 카드2 (0) | 2022.02.15 |
C# 18258번 큐 2 (0) | 2022.02.15 |