priorities 배열이 주어졌을때, location 번째에 해당하는 배열은 몇번째에 출력되는지 구하는 문제이다.
처음 주어진 priorities 배열에서 맨 앞의 숫자가 가장 큰 것이 아니라면 그 숫자를 맨 뒤로 보낸다. 나는 여기에서 큐를 써야겠다는 힌트를 얻었다. 배열을 모두 큐에 넣고 다음의 절차를 큐가 빌 때까지 반복한다.
1. 맨 앞 숫자보다 큰 수 찾기.
2. 없으면 poll, 있으면 poll & offer.
배열의 인덱스를 따로 저장할 필요가 있기 때문에 Printer라는 클래스를 만들고 그 객체를 큐에 담았다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Printer> q = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) { // print큐에 인덱스번호, 우선순위 삽입
q.offer(new Printer(i, priorities[i]));
}
while (!q.isEmpty()) {
boolean flag = false;
int com = q.peek().prior;
for (Printer p : q) {
if (com < p.prior) { // 맨앞의 수보다 큰 숫자가 존재하면
flag = true;
}
}
if (flag) {
q.offer(q.poll());
} else {// 현재 맨앞의 숫자가 가장 클 때
if (q.poll().location == location) {
answer = priorities.length - q.size();
}
}
}
return answer;
}
class Printer {
int location;
int prior;
Printer(int location, int prior) {
this.location = location;
this.prior = prior;
}
}
}