https://school.programmers.co.kr/learn/courses/30/lessons/42587
priorities[] = {1, 1, 9, 1, 1, 1}
이라면 이걸 list에 담아서 내림차순 정렬을 진행하였다.
(생각해보니 그냥 배열을 내림차순으로 정렬하는 것도 나쁘지 않을 듯)
그럼 list = {9, 1, 1, 1, 1, 1}이 될 것이고, Queue에 넣으면서 list의 index가 가리키는 값과 같은지 확인하고, 같으면 location을 확인해서 location위치면 바로 break, 아니면 그냥 index++와 answer++(몇번째 출력인지 알아야 하니까) 해주었다.
만일 index가 가리키는 값과 같지 않다면 다시 Queue에 넣어줌으로써 맨 뒤로 보내는 것이 핵심이다.
Set을 쓰지 않은 이유는 중복을 하게 된다면 ArrayList로 변환했을때 max값의 index를 처리하기가 어려웠다. 따라서 그냥 계속해서 index를 늘려가면서 찾아주는 방식으로 처리하였다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Set<Integer> set = new HashSet<>();
Queue<Process> q = new LinkedList<>();
ArrayList<Integer> list = new ArrayList<>();
int max = 0;
for(int i = 0; i < priorities.length; i++){
//set.add(priorities[i]);
list.add(priorities[i]);
q.add(new Process(i, priorities[i]));
//max = Math.max(max, priorities[i]);
}
//set.stream().sorted();
//ArrayList<Integer> list = new ArrayList<>(set);
Collections.sort(list, Collections.reverseOrder());
int maxIndex = 0;
max = list.get(maxIndex);
while(!q.isEmpty()){
Process pc = q.poll();
if(pc.priority == max){
if(pc.num == location){
break;
}
max = list.get(++maxIndex);
answer++;
} else{
q.add(pc);
}
}
return ++answer;
}
public class Process{
int num;
int priority;
public Process(int num, int priority){
this.num = num;
this.priority = priority;
}
}
}