[백준] 11286 번 : 절댓값 힙 - JAVA 풀이

2025. 4. 12. 10:53·알고리즘/Java 알고리즘

https://www.acmicpc.net/problem/11286

출처 : 백준

 


  1. 절댓값이 가장 작은수대로 우선순위큐에 저장한다.
  2. 값이 0이 아니면 큐에 넣어준다.
  3. 값이 0이면
  • 큐가 비어있으면 0출력
  • 큐 맨앞 수가 0이하이면 그대로 출력
  • 가장 작은 절대값을 가진 수가 양수면 여러개일때를 고려해야하니 list에 모두 담아 그중 작은수를 출력하고 다시 우선순위큐에 넣는다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) throws Exception {

        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2) -> Math.abs(o1) - Math.abs(o2));
        //절대값 기준으로 오름차순 정렬

        for (int i = 0; i < N; i++) {
            int num = Integer.parseInt(br.readLine());

            if (num != 0) { // 숫자가 0이 아니면 pq 에 더해준다.
                pq.offer(num);
            } else { // 숫자가 0이면 절댓값이 가장작은 수를, 여러개면 음수값을 갖는 수를 빼주는 식
                if (pq.isEmpty()) { // 비어있으면 0 출력
                    sb.append(0).append("\n");
                    continue;
                }
                if (pq.peek() <= 0) { // 0 이하이면 그대로 출력
                    sb.append(pq.poll()).append("\n");
                    continue;
                }
                // 0 보다 크면 같은 절댓값을 가진 수들을 list에 모은다.
                List<Integer> list = new ArrayList<>();
                int min = pq.peek();
                while (!pq.isEmpty() && Math.abs(pq.peek()) == min) {
                    list.add(pq.poll());
                }
                //list 수들을 오름차순 정렬
                Collections.sort(list);
                sb.append(list.get(0)).append("\n"); // 가장 작은수 출력
                //list에 남아있는 수 다시 pq에 저장
                for (int j = 1; j < list.size(); j++) {
                    pq.offer(list.get(j));
                }
            }
        }

        System.out.print(sb);
        br.close();
    }
}
728x90
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > Java 알고리즘' 카테고리의 다른 글

[백준] 16166 번 : 서울의 지하철 - JAVA 풀이  (1) 2025.04.15
[백준] 7511 번 : 소셜 네트워킹 어플리케이션 - JAVA 풀이  (1) 2025.04.14
[백준] 7983 번 : 내일 할거야 - JAVA 풀이  (1) 2025.04.11
[IT기사] LG CNS, 국내 최초 SAP 아시아태평양지역 전략 서비스 파트너 이니셔티브 합류 (2025/02/06)  (2) 2025.04.11
[백준] 14890 번 : 경사로 - JAVA 풀이  (1) 2025.04.09
'알고리즘/Java 알고리즘' 카테고리의 다른 글
  • [백준] 16166 번 : 서울의 지하철 - JAVA 풀이
  • [백준] 7511 번 : 소셜 네트워킹 어플리케이션 - JAVA 풀이
  • [백준] 7983 번 : 내일 할거야 - JAVA 풀이
  • [IT기사] LG CNS, 국내 최초 SAP 아시아태평양지역 전략 서비스 파트너 이니셔티브 합류 (2025/02/06)
지니어스팍
지니어스팍
  • 지니어스팍
    생각하고 이해하고 정리하기
    지니어스팍
  • 전체
    오늘
    어제
    • 분류 전체보기 (101)
      • SAP ABAP (7)
      • FI,CO 모듈 (3)
        • 전산세무회계 (3)
      • 알고리즘 (35)
        • 자료구조 (5)
        • 문제 해결 전략 (2)
        • Java 알고리즘 (25)
        • JavaScript 알고리즘 (0)
      • 기사 스크랩 (12)
        • SSAFY 기자 (19)
      • Front-end (7)
        • React (7)
      • 기타 (11)
        • Android app 만들기 (2)
        • JAVA (2)
        • Git (2)
        • 그래픽 디자인 제작 (4)
        • Back-end (0)
        • Study (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    암살포스터
    React
    상태관리
    git bash
    2d 디자인
    eclipse
    unlink '/usr/local/bin/code'
    github
    code.
    ReactError
    일러스트레이터
    jdk설치
    adobe PhotoShop
    맥북vsc
    push 에러
    포토샵
    합성
    Java
    EACCES: permission denied
    eclipse 설치
    git init 끊기
    missing in props validation
    jdk
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
지니어스팍
[백준] 11286 번 : 절댓값 힙 - JAVA 풀이
상단으로

티스토리툴바