컴퓨터/프로그래머스
프로그래머스 - 42587번: 프로세스 [Java]
이상한 나그네
2023. 10. 13. 00:14
문제: https://school.programmers.co.kr/learn/courses/30/lessons/42587
1. 코드
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int[] rank = priorities.clone();
Arrays.sort(rank);
Deque <Deque<Integer>> d = new ArrayDeque<>();
for(int i = 0; i < priorities.length; i++) {
Deque <Integer> temp = new ArrayDeque<>();
temp.add(priorities[i]);
temp.add(i);
d.add(temp);
}
for(int i = rank.length - 1; i >= 0; i--) {
while(d.peek().peek() != rank[i])
d.addLast(d.remove());
if(d.peek().peekLast() == location) {
answer = rank.length - i;
break;
}
d.remove();
}
return answer;
}
}
2. 설명
int answer = 0;
int[] rank = priorities.clone();
Arrays.sort(rank);
rank에 우선순위를 기준으로 오름차순으로 정렬합니다.(내림차순으로 하는 것이 더 좋지만 Integer가 아님으로 오름차순으로 정렬)
Deque <Deque<Integer>> d = new ArrayDeque<>();
for(int i = 0; i < priorities.length; i++) {
Deque <Integer> temp = new ArrayDeque<>();
temp.add(priorities[i]);
temp.add(i);
d.add(temp);
}
덱에 우선순위와 위치 정보를 같이 저장합니다.
for(int i = rank.length - 1; i >= 0; i--) {
while(d.peek().peek() != rank[i])
d.addLast(d.remove());
if(d.peek().peekLast() == location) {
answer = rank.length - i;
break;
}
d.remove();
}
우선순위가 높은 순서부터 진행하는데 우선순위와 덱의 첫번째 우선순위가 동일하지 않으면 덱의 우선순위가 제일 높은 것이 아님으로 제일 높은 우선순위가 나올 때까지 뒷부분에 추가합니다.
만약 우선순위가 덱 내에서 제일 높은데 location과 위치정보가 동일하다면 answer 값을 i와 rank의 길이를 이용하여 도출한 뒤 종료합니다.
3. 정리
- 내림차순으로 정렬이 안된 것 말고는 특별한 것이 없다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges