오늘도 큐를 쓰는게 훨씬 편할거같아서 한번 써봤다.
ㅇ 1트
public static int solution(int[] priorities, int location) {
int answer = 0;
//빈 큐를 하나 만들고 거기에 priorities 넣음
Queue<Integer> q = new LinkedList();
for(int i = 0; i < priorities.length; i++){
q.add(priorities[i]);
}
Queue<Integer> resultQue = new LinkedList<>();
//만약 큐의 첫번째값이 뒤에있는값보다 작을때 뽑아서 다시 뒤로 넣음
//만약 첫번째값(current)이 뒤에있는거보다 크거나 같을때 resultQue 로 넣음
while(!q.isEmpty()){
int current = q.poll();
boolean isBigger = true;
for(int element : q){
if(current < element){
isBigger = false;//current 가 작을때
break;
}
}
if(isBigger) { //current 가 클때,
resultQue.add(current); //resultQue 에 넣음.
}
else{
q.add(current); //작을땐, q뒤에 넣음.
}
}
while(!resultQue.isEmpty()){
System.out.println(resultQue.poll());
}
return answer;
}
사실 여기까지는 우선순위와 문제에 나온대로 큐로 정리를 하는 로직을 짰다. 그런데 location에 맞는 인덱스가 resultQue에 어디에있는지를 찾아야하는데 그게 참 애매했다. 같이 푼 영재님께서
이런 팁을 주셔서 나도 저렇게 해봐야겠다 싶어서 방법을 찾아봤는데 큐에서는 저렇게 하기 힘들어서 새롭게 클래스를 하나 만들기로 마음먹었다. 그래서 Pair 클래스를 만들어서, 저렇게 index까지 같이 저장하는 방법을 선택했다.
ㅇ 2트
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Pair> q = new LinkedList<>();
for (int i = 0; i < priorities.length; i++) {
q.add(new Pair(priorities[i],i));
}
int order = 0; // 처리 순서를 나타내는 변수
while (!q.isEmpty()) {
Pair currentPair = q.poll();
int current = currentPair.value;
int idx = currentPair.index;
boolean isBigger = true;
for (Pair elementPair : q) {
if (current < elementPair.value) {
isBigger = false; // current 가 작을 때
break;
}
}
if (isBigger) {
order++; // 처리 순서 증가
if (idx == location) {
return order; //여기서 정답이 리턴된다!!
}
} else {
q.add(currentPair); // 작을 때, 큐 뒤에 다시 넣음
}
}
return answer;
}
static class Pair {
int value;
int index;
public Pair(int value, int index) {
this.value = value;
this.index = index;
}
}
}