๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 11286 ์ ˆ๋Œ“๊ฐ’ ํž™

by ๐ŸŠ๊ทค๐ŸŠ 2024. 8. 26.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/11286

  • ์ ˆ๋Œ“๊ฐ’ ํž™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
    1. ๋ฐฐ์—ด์— ์ •์ˆ˜ x (x ≠ 0)๋ฅผ ๋„ฃ๋Š”๋‹ค.
    2. ๋ฐฐ์—ด์—์„œ ์ ˆ๋Œ“๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•œ๋‹ค. ์ ˆ๋Œ“๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ๋Š”, ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ์€ ์ฒ˜์Œ์— ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด์—์„œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ฒซ์งธ ์ค„์— ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜ N(1≤N≤100,000)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ x๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ๋งŒ์•ฝ x๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฐฐ์—ด์— x๋ผ๋Š” ๊ฐ’์„ ๋„ฃ๋Š”(์ถ”๊ฐ€ํ•˜๋Š”) ์—ฐ์‚ฐ์ด๊ณ , x๊ฐ€ 0์ด๋ผ๋ฉด ๋ฐฐ์—ด์—์„œ ์ ˆ๋Œ“๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ ๊ฐ’์„ ๋ฐฐ์—ด์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ž…๋ ฅ๋˜๋Š” ์ •์ˆ˜๋Š” -2^31๋ณด๋‹ค ํฌ๊ณ , 2^31๋ณด๋‹ค ์ž‘๋‹ค.
  • ์ž…๋ ฅ์—์„œ 0์ด ์ฃผ์–ด์ง„ ํšŒ์ˆ˜๋งŒํผ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์ธ๋ฐ ์ ˆ๋Œ“๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ•œ ๊ฒฝ์šฐ์—๋Š” 0์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์•„์ด๋””์–ด

  • ์šฐ์„  ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  point๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ˆ๋Œ“๊ฐ’๊ณผ ์›๋ž˜ ์ˆ˜๋ฅผ PriorityQueue์— ์ €์žฅํ•œ๋‹ค.
  • Compare์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ˆ๋Œ“๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์ ˆ๋Œ“๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ์›๋ž˜์ˆ˜๋ฅผ ๋น„๊ตํ•ด์„œ ์ •๋ ฌํ•œ๋‹ค.  

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • Compare์˜ ๋ฐฉ๋ฒ•์ด ์ž˜ ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•„์„œ ๋‹ค์‹œ ์ฐพ์•„๋ณด๊ณ  ๊ณต๋ถ€ํ–ˆ๋‹ค...

์—ญ์‹œ Java... ๊ณต๋ถ€ํ• ๊ฒŒ ๋ฌด๊ถ๋ฌด์ง„ํ•˜๋‹ค... ใ…œใ…œ

์ฝ”๋“œ

import java.io.*;
import java.util.*;
import java.awt.*;

public class BOJ11286 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜
        int N = Integer.parseInt(br.readLine());

        // ์ ˆ๋Œ“๊ฐ’๊ณผ ๊ทธ๋ƒฅ ์ˆ˜๋ฅผ ์ €์žฅํ•  ์šฐ์„  ์ˆœ์œ„ ํ
        // ์ ˆ๋Œ“๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋จผ์ € ์ •๋ ฌํ•˜๊ณ  ๊ธฐ์กด๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•จ
        PriorityQueue<Point> q = new PriorityQueue<Point>(new Comparator<Point>() {
            @Override
            public int compare(Point o1, Point o2) {
                // ์ ˆ๋Œ“๊ฐ’์ด ๋” ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ
                if(o1.x < o2.x){
                    return -1;
                }
                else if(o1.x > o2.x){
                    return 1;
                }
                // ๋งŒ์•ฝ ์ ˆ๋Œ“๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด
                // ์ ˆ๋Œ“๊ฐ’์„ ๋งŒ๋“ค๊ธฐ ์ „์˜ ์›๋ž˜ ์ˆซ์ž๋กœ
                // ๋” ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ
                else{
                    if(o1.y < o2.y){
                        return -1;
                    }
                    else if(o1.y > o2.y){
                        return 1;
                    }
                    else{
                        return 0;
                    }
                }
            }
        });

        for(int i = 0; i < N; i++){
            // ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜
            int n = Integer.parseInt(br.readLine());

            // ๋งŒ์•ฝ ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๊ฐ€ 0์ด๊ณ 
            if(n == 0){
                // ํ๊ฐ€ ๋น„์—ˆ๋‹ค๋ฉด
                if(q.isEmpty()){
                    // 0์„ ์ถœ๋ ฅํ•˜๊ณ 
                    sb.append(0 + "\n");
                }
                // ํ๊ฐ€ ๋น„์ง€ ์•Š์•˜๋‹ค๋ฉด
                else{
                    // ํ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š”
                    // ๋งจ ์œ„์˜ ์›๋ž˜ ์ˆ˜๋ฅผ ์ €์žฅ ํ›„
                    int out = q.peek().y;

                    // ํ์—์„œ ๋นผ๋‚ด๊ณ 
                    q.poll();

                    // ์ถœ๋ ฅ
                    sb.append(out + "\n");
                }
            }
            // ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด
            else{
                // ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜์˜ ์ ˆ๋Œ“๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅ ํ›„,
                int n_abs = Math.abs(n);

                // ์šฐ์„ ์ˆœ์œ„ ํ์— ์ ˆ๋Œ“๊ฐ’๊ณผ ์›๋ž˜ ์ˆ˜๋ฅผ ์ €์žฅ
                q.offer(new Point(n_abs, n));
            }
        }

        System.out.println(sb);
    }
}