성능 요약
- 메모리: 78.4 MB, 시간: 0.68 ms
구분
- 코딩테스트 연습 > 스택/큐
Answer Code1(23.03.29)
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
Queue<Pair> queue = new LinkedList<>();
int answer = 0;
for(int i = 0; i < priorities.length; i++) {
queue.add(new Pair(i, priorities[i]));
}
while(!queue.isEmpty()) {
int current = queue.peek().value;
boolean flag = false;
for(Pair pair : queue) {
if(pair.value > current) {
flag = true;
break;
}
}
if (flag) { //우선순위가 높은게 있으면 뒤로 보낸다.
Pair temp = queue.poll();
queue.add(temp);
} else {
answer++;
Pair pair = queue.poll();
if(pair.index == location) {
return answer;
}
}
}
return answer;
}
class Pair {
int index;
int value;
public Pair(int index, int value) {
this.index = index;
this.value = value;
}
}
}
Answer Code2(23.03.29)
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
// 1. 큰 수가 우선순위를 갖는 우선순위 큐
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
int answer = 0;
//2. 우선순위 큐에 배열값 넣어주기
for (int i = 0; i < priorities.length; i++) {
pq.add(priorities[i]);
}
// 3. 큐의 값이 없어지기 전까지 반복
while (!pq.isEmpty()) {
for (int i = 0; i < priorities.length; i++) {
// 4.만약 큐의 가장 높은 숫자가 배열의 i번째 index값과 같다면
if (priorities[i] == pq.peek()) {
// 5.값과 위치가 모두 같다면 answer 리턴
if (i == location) {
answer++;
return answer;
}
// 6.값만 일치하는 경우 해당 문서 출력
pq.poll();
answer++;
}
}
}
return -1;
}
}
Answer Code3(23.12.17)
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Pair> queue = new LinkedList<>();
for(int i = 0; i < priorities.length; i++) {
queue.add(new Pair(i, priorities[i]));
}
while(!queue.isEmpty()) {
int currnet = queue.peek().value;
boolean flag = false;
for(Pair pair : queue) {
if(pair.value > currnet) { // 현재 값보다 나머지 값이 우선순위가 더 높다면
flag = true;
break;
}
}
if(flag) {
Pair temp = queue.poll();
queue.add(temp);
} else {
// 현재 값이 나머지 값보다 우선순위가 더 높다면 answer++
answer++;
Pair pair = queue.poll();
if(pair.index == location) { // 현재 찾고자 하는 위치이면 출력
return answer;
}
}
}
return answer;
}
class Pair {
int index;
int value;
public Pair(int index, int value) {
this.index = index;
this.value = value;
}
}
}
Review
-
1번은 그냥 큐로 구현한 것이고, 2번은 우선순위 큐로 구현한 것이다.
-
문제에 대한 설명을 읽고 직관적으로 큐를 사용해서 구현해야 했다.
-
큐에 남아있는 값들 중 방금 뽑은 값보다 더 높은 우선순위가 있으면 다시 큐에 넣는 식으로 했다.