[프로그래머스 알고리즘 고득점 Kit][힙(Heap)][Java] 이중우선순위큐

2026. 6. 10. 23:45·알고리즘 & 자료구조/문제 풀이

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

문제이름이 너무 힌트라 2개의 우선순위큐를 사용하는 방법을 생각했다.

최댓값과 최솟값을 항상 관리해야 하는데

하나의 우선순위큐로는 쉽지 않다.

그래서 최대를 관리하는 우선순위큐와 최소를 관리하는 우선순위큐를 나눠서 관리한다.

그러면 여기서 하나의 수열에서 최대와 최소를 관리해야 하는데 2개로 나눴기 때문에

다른 하나의 우선순위큐에서 삭제 혹은 추가는 다른 우선순위큐에서도 적용이 되어야 한다.

추가는 둘 다 추가하면 된다.

삭제는 바로 꺼내서 삭제할 수 없기 때문에

하나의 우선순위 큐에서 삭제하면 그 수는 다른 우선순위에서 꺼내질 때 과거에 삭제된 숫자

임을 보여주기 위해 클래스로 isActive를 만들어서 추가해 줬다.

그러고 나서 모든 커맨드를 끝내고

최대와 최소를 꺼낼때도 그 숫자가 과거에 삭제된 숫자임을 확인해줘야한다.

 

import java.util.*;

class Solution {
    
    class Num {
        int num;
        boolean isActive;
        
        Num(int num) {
           this.num = num;
            this.isActive = true;
        }
        void disable() {
            this.isActive = false;
        }
    }
    
    public int[] solution(String[] operations) {
        PriorityQueue<Num> minPq = new PriorityQueue<>((n1, n2) -> {
            return Integer.compare(n1.num, n2.num);
        });
        PriorityQueue<Num> maxPq = new PriorityQueue<>((n1, n2) -> {
            return Integer.compare(n2.num, n1.num);
        });
        
        
        for(String s : operations) {
            StringTokenizer st = new StringTokenizer(s);
            char cmd = st.nextToken().charAt(0);
            int num = Integer.parseInt(st.nextToken());
            
            if(cmd == 'I') {
                Num n = new Num(num);
                minPq.add(n);
                maxPq.add(n);
            } else {
                if(num == 1) {
                    while(!maxPq.isEmpty()) {
                        Num n = maxPq.poll();
                        if(n.isActive) {
                            n.disable();
                            break;
                        }
                    }
                    
                    
                } else if(num == -1) {
                    while(!minPq.isEmpty()) {
                        Num n = minPq.poll();
                        if(n.isActive) {
                            n.disable();
                            break;
                        }
                    }
                }
            }
        }
        int max = 0;
        int min = 0;
        while(!maxPq.isEmpty()) {
            Num n = maxPq.poll();
            if(n.isActive) {
                max = n.num;
                break;
            }
        }
        while(!minPq.isEmpty()) {
            Num n = minPq.poll();
            if(n.isActive) {
                min = n.num;
                break;
            }
        }
        int[] answer = {max, min};
        
        return answer;
    }
}

저작자표시 비영리 변경금지 (새창열림)

'알고리즘 & 자료구조 > 문제 풀이' 카테고리의 다른 글

[프로그래머스 알고리즘 고득점 Kit][정렬][Java] H-Index  (0) 2026.05.26
[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 올바른 괄호  (0) 2026.05.24
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming)][Java] 도둑질  (0) 2026.05.24
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming)][Java] 사칙연산  (0) 2026.05.08
[프로그래머스 알고리즘 고득점 Kit][그리디][Java] 체육복  (0) 2026.04.30
'알고리즘 & 자료구조/문제 풀이' 카테고리의 다른 글
  • [프로그래머스 알고리즘 고득점 Kit][정렬][Java] H-Index
  • [프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 올바른 괄호
  • [프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming)][Java] 도둑질
  • [프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming)][Java] 사칙연산
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (67) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (34) N
        • 내용 정리 (2)
        • 문제 풀이 (32) N
      • 데이터베이스 (27)
        • 내용 정리 (1)
        • 문제 풀이 (26)
      • CS (2)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 블로그
  • 공지사항

  • 인기 글

  • 태그

    해시
    프로그래머스 알고리즘 고득점 kit
    AVG
    깊이/너비 우선 탐색(DFS/BFS)
    정렬
    IFNULL
    바이브코딩
    Java
    분리집합
    like
    알고리즘
    date_format
    SQL
    Round
    코팅테스트
    mysql
    bfs
    매개변수탐색
    동적계획법
    HTTP 메서드
    코테
    바킹독
    coalesce
    유니온파인드
    프로그래머스
    그래프
    코딩테스트
    삼성청년SW·AI아카데미
    이분탐색
    DP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수수다
[프로그래머스 알고리즘 고득점 Kit][힙(Heap)][Java] 이중우선순위큐
상단으로

티스토리툴바