https://programmers.co.kr/learn/courses/30/lessons/42587
문제
이해
문제를 보면, 해당 location에 있는 문서가 몇번째로 출력되는지를 구하는문제인데,
차례대로 우선순위를 확인하여 , 우선순위가 아니면, 작업을 맨뒤로 보내버린다.
즉. 선입 선출 구조의 큐를 이용해야 한다.
Peek 작업이 Queue가 가지는 max값(최고 우선순위값)이 아니라면 맨뒤에 넣어주는 작업을 하면서,
해를 구하면 되겠다.
풀이
입력으로 들어오는 작업목록을 Queue 초기화해주고,
Collections.max 메소드를 이용해서, 최상위 우선순위인지 확인하며 작업한다.
최상위 우선순위가 아니라면, poll하여 뒤로 다시 offer해준다.
최상위 우선순위이면서, 내가 찾고자하는 작업이면, 결과값을 리턴해준다.
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;
class Solution {
public static int solution(int[] priorities, int location) {
// 작업목록을 Queue에 초기화
Queue<Integer> q = new LinkedList<>();
for (int priority : priorities)
q.offer(priority);
int cnt=0;
// location을 기록하면서 반환개수 count
while(!q.isEmpty()){
// poll과 count
if(Collections.max(q) == q.peek()){// 최상위 우선순위면 빼주면서 count
if(location==0) // 결과 반환
return cnt;
else{
cnt++;
q.poll();
}
}else{ // 우선순위가 아니면 뒤로 넣기
q.add(q.poll());
}
// 위치 기록
if(location!=0)
location--;
else
location = q.size()-1;
}
return 0;
}
}
Collections.max 메소드가 많은 코드를 줄일 수 있는 방법이다.
Collections에 max, min 메소드는 list와 Set, Map 등에서도 사용할 수 있다.
'Algorithm > 프로그래머스 고득점 Kit' 카테고리의 다른 글
[스택/큐] 주식가격 - Java 코드 ★★★ (0) | 2022.03.03 |
---|---|
[스택/큐] 다리를 지나는 트럭 - Java코드 ★★★ (0) | 2022.03.03 |
[스택/큐] 기능개발 - Java코드 (0) | 2022.02.22 |
[그래프] 방의 개수 - Java코드 ★★★★★ 매우 어려움 (0) | 2021.08.26 |
[그래프] 순위 - Java코드 (0) | 2021.08.26 |