◎ 문제
○ 출처
https://programmers.co.kr/learn/courses/30/lessons/42587
○ 문제 설명
예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알고 싶습니다. 현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 |
○ 제한 사항
|
○ 입출력 예
○ 입출력 예 설명
예제 #1 문제에 나온 예와 같습니다. 예제 #2 6개의 문서(A, B, C, D, E, F)가 인쇄 대기목록에 있고 중요도가 1 1 9 1 1 1 이므로 C D E F A B 순으로 인쇄합니다. |
○ 작성 예시 코드
using System;
public class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
return answer;
}
}
◎ 나의 문제 풀이
using System.Collections.Generic;
using System.Linq;
// 프린터의 우선순위 정보를 저장할 클래스
class Priority
{
public int number = 0; // 프린터의 중요도
public int location = 0; // 현재 순서를 저장할 변수
public Priority(int num, int loca)
{
number = num;
location = loca;
}
}
public class Solution
{
public int solution(int[] priorities, int location)
{
int answer = 0;
Queue<Priority> priorties_queue = new Queue<Priority>();
// 큐에 Priority 클래스의 정보에 맞게끔 순서 데이터를 추가하여 저장
for(int i = 0; i < priorities.Length; ++i)
{
Priority temp_prior = new Priority(priorities[i], i);
priorties_queue.Enqueue(temp_prior);
}
// 프린트 대기중인 큐가 없어질 때까지 반복
while(priorties_queue.Count > 0)
{
// 현재 큐에서 가장 큰 수(우선순위)를 찾음
int max_number = priorties_queue.ToArray().Max(x => x.number);
// 큐에서 바로 다음 프린트 대기중인 데이터 가져옴
Priority temp_queue = priorties_queue.Dequeue();
// 우선순위가 가장 높을 경우 프린트함
if (temp_queue.number >= max_number)
{
answer++;
// 우선순위가 가장 높으면서 요청한 location일 경우 반복문 종료
if (temp_queue.location == location)
{
break;
}
}
// 우선순위가 가장 높지않을 경우는 다시 큐의 맨 뒤로 보냄
else
{
priorties_queue.Enqueue(temp_queue);
}
}
return answer;
}
}
'프로그래밍 문제 풀이 > C#' 카테고리의 다른 글
[프로그래밍 문제 풀이] 프로그래머스 - 가장 큰 수 (C#) (0) | 2020.09.10 |
---|---|
[프로그래밍 문제 풀이] 프로그래머스 - 스킬트리 (C#) (0) | 2020.08.12 |
[프로그래밍 문제 풀이] 프로그래머스 - 다리를 지나는 트럭 (C#) (0) | 2020.08.12 |
[프로그래밍 문제 풀이] 프로그래머스 - 주식가격 (C#) (0) | 2020.08.11 |
[프로그래밍 문제 풀이] 프로그래머스 - 기능개발 (C#) (0) | 2020.08.09 |