본문 바로가기

Programmers/Level3

이중우선순위큐

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
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.*;
class Solution {
    // 이진 탐색으로 탐색하여 삽입해야 할 위치 반환
    public static int getIndex(ArrayList<Integer> list, int num) {
        int mid;
        int left = 0;
        int right = list.size() - 1;
 
        while (left <= right) {
            mid = (left + right) / 2;
            if (list.get(mid) < num) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }
    public int[] solution(String[] operations) {
        int[] answer = new int[2];
        ArrayList<Integer> list = new ArrayList<Integer>();
        
        for (int i = 0; i < operations.length; i++) {
            String[] arr = operations[i].split(" ");
            int n = Integer.parseInt(arr[1]);
            if (arr[0].equals("I")) {
                int index = getIndex(list, n);
                list.add(index, n);
            } else {
                if (!list.isEmpty()) {
                    list.remove(n == 1 ? list.size() - 1 : 0);
                }
            }
        }
        if (!list.isEmpty()) {
            answer[0= list.get(list.size() - 1);
            answer[1= list.get(0);
        }
 
        return answer;
    }
}
cs

이진 탐색으로 삽입할 위치를 찾아서 넣고, 최댓값과 최솟값을 제거해주었다.

 

PriorityQueue를 사용하려 했지만 맨 앞의 값을 삭제하는 방법을 몰라서 사용하지 못하였다.

하지만 PriorityQueue의 remove 메소드를 통해 앞에 있는 값도 삭제할 수 있다.

'Programmers > Level3' 카테고리의 다른 글

순위  (0) 2021.08.12
[1차] 셔틀버스  (0) 2021.08.12
정수 삼각형  (0) 2021.08.09
단어 변환  (0) 2021.08.08
입국심사  (0) 2021.08.08