문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
// 우선순위, 인덱스를 가진 LinkedList process 생성
LinkedList<String> processes = new LinkedList<>();
// process 에 프로세스 데이터(우선순위, 인덱스) 삽입
int index = 0;
for(int priority : priorities) {
processes.add(priority + "," + index++);
}
// 우선순위가 가장 큰 값을 찾기 위해 priorities 정렬 끝에부터 점차 접근
Arrays.sort(priorities);
// 가장 우선순위가 높은 값
int maxPriority = priorities.length-1;
int processIndex = 0;
int locate = -1;
while(locate != location) {
for(int i = 0; i < processes.size(); i++) {
// processes의 i번째 인덱스에 값을 가져온다.
String process = processes.getFirst();
// ',' 를 기준으로 우선순위 값과 location 값을 가지고 있다.
int commaIndex = process.indexOf(",");
// 우선순위 값
int priority = Integer.parseInt(process.substring(0, commaIndex++));
// location 값
// 현재 프로세스의 우선순위가 가장 우선순위가 큰 값과 같다면
if(priority == priorities[maxPriority]) {
// 프로세스 실행
processes.removeFirst();
locate = Integer.parseInt(process.substring(commaIndex, process.length()));
maxPriority--;
break;
} else {
// 프로세스 뒤로 옮기기
processes.addLast(processes.removeFirst());
}
}
answer++;
}
return answer;
}
}
Java
복사