728x90
문제 풀이 힌트
- 문제 이해:
- 대기 큐에 있는 프로세스들의 우선순위에 따라 순서대로 실행됩니다.
- 몇 번째에서 실행되는지 알고 싶을 때.
- 우선순위 관리:
- 우선순위가 높은 프로세스가 먼저 실행됩니다. 이를 위해 우선순위 배열을 정렬하여 가장 높은 우선순위를 찾습니다.
- 큐(Queue) 사용:
- 큐는 먼저 들어온 것이 먼저 나가는 구조입니다. 큐(Queue)를 모르신다면 문제 풀기 전에 보고 오시는 것을 추천합니다.
- 큐를 사용하여 프로세스의 우선순위를 관리합니다.
- 로직 설명:
- 가장 높은 우선순위의 프로세스가 실행될 때마다 출력 순서를 증가시키고, 타겟 프로세스의 인덱스를 감소시킵니다.
- 타겟 프로세스가 실행되면 그때까지의 출력 순서를 반환합니다.
- 만약 현재 프로세스가 가장 높은 우선순위가 아니라면, 해당 프로세스를 큐의 맨 뒤로 이동시켜야 합니다.
- 인덱스 관리:
- 타겟 프로세스의 인덱스를 관리하여 프로세스가 큐에서 이동할 때마다 업데이트합니다. 타겟 인덱스가 0이 되면 해당 프로세스가 출력된 것입니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int result = 0; // 출력 순서를 저장할 변수
// 우선순위 배열을 복사하고 정렬하여 가장 높은 우선순위를 알 수 있게 함
int[] sortedArray = priorities.clone();
Arrays.sort(sortedArray);
// 큐를 사용하여 우선순위 배열을 저장
Queue<Integer> queue = new LinkedList<>();
for (int n : priorities) {
queue.add(n);
}
int point = priorities.length - 1; // 가장 높은 우선순위의 인덱스
int targetIndex = location; // 내가 궁금한 프로세스의 위치
while (true) {
// 큐의 첫번째 요소가 현재 가장 높은 우선순위와 같다면
if (sortedArray[point] == queue.peek()) {
queue.poll(); // 큐에서 제거
result++; // 출력 순서 증가
point--; // 다음으로 높은 우선순위로 이동
// 내가 궁금한 프로세스가 실행된 경우
if (targetIndex == 0) {
return result; // 출력 순서 반환
}
} else {
// 큐의 첫번째 요소를 맨 뒤로 이동
queue.offer(queue.poll());
}
// 타겟 인덱스를 감소시키고, 0보다 작아지면 큐의 마지막 인덱스로 설정
targetIndex = targetIndex - 1 >= 0 ? targetIndex - 1 : queue.size() - 1;
}
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] 더 맵게 (0) | 2024.07.16 |
---|---|
[프로그래머스] 귤 고르기 (0) | 2024.07.16 |
[프로그래머스] 멀리뛰기 (0) | 2024.07.12 |
[프로그래머스] 의상 (0) | 2024.07.09 |
[프로그래머스] 타겟넘버 (0) | 2024.07.09 |