티스토리 뷰

algorithm/problem solving

PROGRAMMERS level 2 프린터

무니웜테일패드풋프롱스 2020. 5. 10. 17:45

 

1. priorities 배열을 우선순위 큐에 넣는다.

2. priorities 배열의 값과 배열의 인덱스 (location)를 pair로 하여 큐에 넣는다.

3. 큐가 empty가 아닐 때까지 while문을 돌면서, 우선순위 큐와 큐에서 각각 poll을 해준다.

    -> 우선순위 큐에서 poll된 값 ! = 현재 poll된 큐 의 우선순위 라면, poll했던 큐를 다시 넣고 큐에서 계속 poll -> add를 반복한다.  ( 해당 우선순위의 요소가 나올 때 까지) 

4.  queue 에서 최종적으로 poll된 값의 location과 우리가 찾을 요소의 location이 같다면 종료해준다. 

 

 

import java.util.*;
class pair{
	int loc;
	int prior;
	
	public pair(int loc, int prior) {
		this.loc=loc;
		this.prior=prior;
	}

}
class Solution {
    public int solution(int[] priorities, int location) {
        int answer =0;
        Queue<pair>queue = new LinkedList<>();
		 PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
		for(int i = 0; i< priorities.length; i++) {
			queue.add(new pair(i,priorities[i]));
			pq.add(priorities[i]);
		}
		while(!queue.isEmpty()) 
		{
			answer++;
			pair que_poll=queue.poll();
			int pq_poll=pq.poll();
			while(true) {
				if(que_poll.prior==pq_poll) break;
				queue.add(que_poll);
				que_poll=queue.poll();
			}
			if(que_poll.loc == location) break;
	
		}
        return answer;
    }
}

'algorithm > problem solving' 카테고리의 다른 글

BOJ 1976 여행 가자  (0) 2020.05.26
BOJ 2110 공유기 설치  (0) 2020.05.14
BOJ 11559 Puyo Puyo  (0) 2020.05.07
BOJ 2206 벽 부수고 이동하기  (0) 2020.05.05
BOJ 15686 치킨배달  (0) 2020.05.03
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함