[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/42587?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[풀이 과정]
문제에 나와있는 설명 그대로 구현하면 된다.코드에 주석을 달아놨으니 코드를 따라 보면서 이해하면 좋을 것 같습니다.
[코드]
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<int[]> queue = new LinkedList<>();
// 실행된 순서대로 원래 idx를 담을 예정인 배열
ArrayList<Integer> arr = new ArrayList<>();
// queue에 담기
for(int i = 0; i < priorities.length; i++) {
queue.add(new int[] {i, priorities[i]});
}
// queue가 빌때까지 반복
while(!queue.isEmpty()) {
int maxValue = 0;
// queue에서 우선순위 max값을 찾는다
for(int[] i : queue) {
if(maxValue < i[1]) {
maxValue = i[1];
}
}
// 가장 먼저 넣은 queue값
int[] recentQueue = queue.poll();
// recentQueue[1] = 우선순위
// recentQueue[0] = 원래 idx값
// maxValue와 우선순위가 같으면 빼서 arr에 추가
if(recentQueue[1] == maxValue) {
arr.add(recentQueue[0]);
} else { // 아니면 빼고 다시 제일 뒤로
queue.add(recentQueue);
}
}
// 문제에서 원하는 idx값이 어디있는지 배열을 탐색
for(int i = 0; i < arr.size(); i++) {
if(arr.get(i) == location) {
// 쉽게 말해 i = idx 값 = 나온 순서
// +1을 하는 이유는 idx는 0부터 시작하기 때문
answer = i+1;
break;
}
}
return answer;
}
}
[회고]
문제를 잘 읽으니 쉬운 문제였습니다.
제한시간도 널널하여 for문과 while문을 마구 사용하였습니다.
질문과 피드백은 언제나 환영입니다.
감사합니다.
'CodingTest > Programmers' 카테고리의 다른 글
[Programmers] 주식가격 (0) | 2025.04.12 |
---|---|
[Programmers] 다리를 지나는 트럭 (0) | 2025.04.10 |
[Programmers] 올바른 괄호 (1) | 2025.04.03 |
[Programmers] 기능개발 (0) | 2025.04.03 |
[Programmers] 베스트앨범 (0) | 2025.04.01 |