https://school.programmers.co.kr/learn/courses/30/lessons/42587
1. 실행 대기 큐(Queue)에서 대기 중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
먼저 이중배열이 들어가는 Deque를 만들어서 중요도(priorities)와 순서를 차례대로 넣어주었다.
Deque<int[]> deque = new ArrayDeque<>();
for (int i = 0; i < priorities.length; i++) {
int[] insert = new int[2];
insert[0] = priorities[i];
insert[1] = i;
deque.add(insert);
}
그다음 먼저 pri라고 중요도를 오름차순으로 정렬한 것을 이용하여 만약 deque의 앞쪽 부분이 중요도가 가장 높은 것과 같다면 deque에서 빼주고 그 순서를 배열에 정리하였다. 그리고 만약 중요도와 같지 않다면 deque의 끝부분에 앞쪽 부분을 빼서 넣어주었는 것을 반복하였다.
for (int i = priorities.length - 1; i >= 0; i--) {
while (true) {
int[] value = deque.peekFirst();
if (value[0] == pri[i]) {
index[idx] = value[1];
idx++;
deque.pollFirst();
break;
} else {
deque.addLast(deque.pollFirst());
}
}
}
모든 작업이 끝나면 location을 찾아서 해당 순서 + 1을 해주어 정답을 구했다.
for (int i = 0; i < index.length; i++) {
if (index[i] == location)
answer = i+1;
}
return answer;
아래는 전체 코드
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int[] pri = priorities.clone();
int[] index = new int[priorities.length];
int idx = 0;
Arrays.sort(pri);
Deque<int[]> deque = new ArrayDeque<>();
for (int i = 0; i < priorities.length; i++) {
int[] insert = new int[2];
insert[0] = priorities[i];
insert[1] = i;
deque.add(insert);
}
for (int i = priorities.length - 1; i >= 0; i--) {
while (true) {
int[] value = deque.peekFirst();
if (value[0] == pri[i]) {
index[idx] = value[1];
idx++;
deque.pollFirst();
break;
} else {
deque.addLast(deque.pollFirst());
}
}
}
for (int i = 0; i < index.length; i++) {
if (index[i] == location)
answer = i+1;
}
return answer;
}
}
'Programmers' 카테고리의 다른 글
[프로그래머스][JAVA]Lv. 2 - H-Index (0) | 2023.05.18 |
---|---|
[프로그래머스][JAVA]Lv. 2 - 더 맵게 (0) | 2023.05.18 |
[프로그래머스][JAVA]Lv. 2 - 기능개발 (0) | 2023.05.16 |
[프로그래머스][JAVA]Lv. 2 - 다리를 지나는 트럭 (0) | 2023.05.15 |
[프로그래머스][JAVA]Lv. 2 - 주식가격 (0) | 2023.05.07 |