Google 태그 관리자 아이콘

알고리즘 풀이

.programmers(이중우선순위큐)

silvergoni 2022. 4. 8. 23:10
반응형

https://programmers.co.kr/learn/courses/30/lessons/42628

 

1. 2022.04.08 시도

소요시간: 16분

import java.util.*;

class Solution {
    public int[] solution(String[] operations) {
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        
        for (int i=0 ;i<operations.length; i++) {
            String each = operations[i];
            if (each.indexOf("I ") > -1) {
                int number = Integer.parseInt(each.replace("I ", ""));
                pq.offer(number);
            } else if (each.indexOf("D 1") > -1) {
                PriorityQueue<Integer> other = new PriorityQueue<>();
                for (int j=0; j< pq.size()-1; j++) {
                    other.offer(pq.poll());
                }
                pq = other;
            } else if (each.indexOf("D -1") > -1) {
                pq.poll();
            }
        }

        if (pq.size() == 0) {
            return new int[]{0,0};
        }
        
        int[] answer = new int[2];
        answer[1] = pq.poll();
        int max = 0;
        while(!pq.isEmpty()) {
            max = pq.poll();
        }
        answer[0] = max;
        
        return answer;
    }
}

풀이 접근 과정

일단 간단하게 String 파싱을 하여 분기를 작성한다.
- 숫자일때는 Integer.parseInt를 사용
- 최대/최소일때는 각각 작업을 구현한다.

최대 일때는 여러가지 방법이 있겠지만 나는 2개의 PriorityQueue를 이용하였다.

 

느낀점

  • 문제를 끝까지 보자.
  • 이중 큐로 풀면 아래와 같다. pq.remove()와 Collections.reverseOrder()를 사용해보는 경험을 했다.
import java.util.*;

class Solution {
    public int[] solution(String[] operations) {
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        PriorityQueue<Integer> rpq = new PriorityQueue<>(Collections.reverseOrder());
        
        for (int i=0 ;i<operations.length; i++) {
            String each = operations[i];
            if (each.indexOf("I ") > -1) {
                int number = Integer.parseInt(each.replace("I ", ""));
                pq.offer(number);
                rpq.offer(number);
            } else if (each.indexOf("D 1") > -1) {
                Integer target = rpq.poll();
                pq.remove(target);
            } else if (each.indexOf("D -1") > -1) {
                Integer target = pq.poll();
                rpq.remove(target);
            }
        }

        if (pq.size() == 0) {
            return new int[]{0,0};
        }
        
        int[] answer = new int[2];
        answer[0] = rpq.poll();
        answer[1] = pq.poll();
        
        return answer;
    }
}

 


알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)

반응형

 

'알고리즘 풀이' 카테고리의 다른 글

.programmers(가장 큰 수)  (0) 2022.04.09
.programmers(K번째수)  (0) 2022.04.08
.programmers(디스크 컨트롤러)  (0) 2022.04.08
.programmers(더 맵게)  (0) 2022.04.08
.programmers(주식가격)  (0) 2022.04.08