https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=java
import java.util.*;
class Solution {
static class Pair{
int x;
int y;
public Pair(int x, int y) {
this.x = x;
this.y = y;
}
}
public int solution(int[] priorities, int location) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());
Queue<Pair> q = new LinkedList<>();
for(int i = 0; i < priorities.length; i++){
q.add(new Pair(i, priorities[i]));
pq.add(priorities[i]);
}
while(!q.isEmpty()){
Pair now = q.poll();
if(now.y == pq.peek()){
answer++;
pq.poll();
if(now.x == location) return answer;
}else{
q.add(now);
}
}
return answer;
}
}
과거 C++ 로 풀었던것과 동일한 방법의 풀이.
우선순위 큐와 그냥 큐 두개를 사용해서 풀었다.
우선순위 큐에는 우선순위가 내림차순으로 정렬된다. 즉, 높은 순서부터 차례대로.
일반 큐에는 Pair 형태로 들어온 순서와 우선순위 값이 들어간다.
while 문 돌면서 우선순위 큐와 큐에서 하나씩 빼서 비교하고 우선순위가 동일하다면 일단 순서(answer) 올려주고 들어온 순서하고 입력받은 location 하고 동일하다면 그게 정답이니 바로 return.
아니라면 큐에 방금 뽑은거 다시 넣어준다.
의식의 흐름대로 풀면된다.
무난.