알고리즘
프로그래머스 프린터 (JAVA)
박카스마시며코딩
2022. 6. 11. 19:23
https://programmers.co.kr/learn/courses/30/lessons/42587#
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
저는 큐를 통해서 해당 문제를 해결하였습니다.
큐에 인덱스와 값을 표현한 배열을 넣고 이를 빼보면서 해당 인덱스와 같으면 종료하고 아니라면 max값과 비교하여 max와 같다면 answer를 늘리고 , 다르다면 해당 배열을 큐의 맨 뒤에 넣었습니다.
max는 현재 큐의 가장 큰 값입니다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int[] numberCnt = new int[10];
int max = 0;
Queue<int[]> q = new LinkedList<>();
for(int i = 0 ; i < priorities.length ; i++){
q.offer(new int[] {i,priorities[i]});
max = Math.max(max,priorities[i]);
numberCnt[priorities[i]]++;
}
System.out.println(max);
while(true){
int[] now = q.poll();
if(now[1] == max){
answer++;
if(now[0] == location){
break;
}
if(--numberCnt[max] == 0){
max = findNextMax(numberCnt,max);
}
}else{
q.offer(now);
}
}
return answer;
}
private int findNextMax(int[] numberCnt , int max){
for(int i = max ; i > 0 ; i--){
if(numberCnt[i] != 0){
return i;
}
}
return 0;
}
}