- 내 방법 풀이
- 문제 유형을 보고 Queue를 활용하여 풀 생각을 했다. 또한 Queue의 대표적 활용 예시이기 때문에 Queue를 선언했고, 중요도와 제한조건을 생각해서 max를 구할 생각을 했다.
- 처음에 예시를 보고 priorities에 작업마다 우선순위(숫자 1~9)와 이름(A~Z)가 배열로 제공된 줄 알고 HashMap<String, Integer>로 풀어야 하나 생각했는데 우선순위 배열만 주어져서 실행된 작업이 location에 있던 작업인지 어떻게 확인할 지 고민되었다.
- location의 값을 조정하며, 큐에서 poll할 때 location이 0이었다면 구하고자 하는 값을 구할 수 있을거라고 생각했다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 1;
// 차례대로 꺼냄. 프로세스 중요도가 더 높은 것이 큐 안에 있으면 다시 넣기
// location번째 작업이 실제로 몇 번째로 실행됬는지를 리턴
Queue<Integer> queue = new LinkedList<>();
for (int i : priorities) {
queue.add(i);
}
while (true) {
int max = 0;
for (int i : queue) { // 최우선작업 중요도
if (i > max) max = i;
}
int nowProcess = queue.poll();
if (nowProcess == max) { // 꺼낸 작업이 최우선작업인 경우
if (location == 0) {
break;
} else {
location--;
answer++;
}
} else { // 꺼낸 작업의 중요도가 max보다 작은 중요도일 경우
queue.add(nowProcess); // 다시 큐에 넣기
if (location == 0) {
location = queue.size() - 1;
} else {
location--;
}
}
}
return answer;
}
}
- 다른 사람 방법 풀이
- 다른 사람 풀이를 찾아보니 우선순위 큐를 활용한 풀이들이 많이 나왔다. 익숙치 않았기 때문에 Queue로만 푼 풀이를 가져왔다.
- priorities를 정렬하여 가장 높은 중요도를 찾고 큐에서 poll한 작업의 중요도가 가장 높다면 작업을 실행시킨 것으로 만들고 answer와 location을 조정한다. 그리고 location이 -1이 됬다면 작업이 실행된 것이므로 반복문을 중단한다.
- priorities에서 가장 높은 중요도를 찾는 것이 특이했는데, 원래 사이즈에서 이미 실행된 작업의 수를 빼는 방식으로 구했다. 내 정답 코드에서 매번 반복문을 실행하는 것보다 더 효율적인 부분이다.
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
int l = location;
Queue<Integer> que = new LinkedList<Integer>();
for(int i : priorities){
que.add(i);
}
Arrays.sort(priorities);
int size = priorities.length-1;
while(!que.isEmpty()){
Integer i = que.poll();
if(i == priorities[size - answer]){
answer++;
l--;
if(l <0)
break;
}else{
que.add(i);
l--;
if(l<0)
l=que.size()-1;
}
}
return answer;
}
}
'개발지 > 코테' 카테고리의 다른 글
[프로그래머스] 코테연습 - 주식 가격 (lv.2) (2) | 2023.11.23 |
---|---|
[프로그래머스] 코테연습 - [PCCP 기출문제] 1번(lv.1) (0) | 2023.11.23 |
[프로그래머스] 코테연습 - 숫자의 표현(lv.2) (2) | 2023.11.21 |
[프로그래머스] 코테연습 - 체육복(lv.1) (0) | 2023.11.20 |
[프로그래머스] 코테연습 - 점프와 순간 이동(lv.2) (1) | 2023.11.18 |