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

[Java] BOJ 11651 ์ขŒํ‘œ ์ •๋ ฌํ•˜๊ธฐ 2

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 16.

๋ฌธ์ œ 

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

  • 2์ฐจ์› ํ‰๋ฉด ์œ„์˜ ์  N๊ฐœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ขŒํ‘œ๋ฅผ y์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ, y์ขŒํ‘œ๊ฐ€ ๊ฐ™์œผ๋ฉด x์ขŒํ‘œ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ •๋ ฌํ•œ ๋‹ค์Œ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์ฒซ์งธ ์ค„์— ์ ์˜ ๊ฐœ์ˆ˜ N (1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. 
  • ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” i๋ฒˆ์ ์˜ ์œ„์น˜ xi์™€ yi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (-100,000 ≤ xi, yi ≤ 100,000) ์ขŒํ‘œ๋Š” ํ•ญ์ƒ ์ •์ˆ˜์ด๊ณ , ์œ„์น˜๊ฐ€ ๊ฐ™์€ ๋‘ ์ ์€ ์—†๋‹ค.
  • ์ฒซ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ ์„ ์ •๋ ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

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

  • ์ขŒํ‘œ ์ •๋ ฌํ•˜๊ธฐ์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ธ Comparator์„ ์‚ฌ์šฉํ•˜์—ฌ y์ขŒํ‘œ ๊ฐ’์„ ์ •๋ ฌํ•˜๊ณ  ๋‘ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ, x๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌํ•˜์˜€๋‹ค. 

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

  • X

์†”์งํžˆ ์ขŒํ‘œ ์ •๋ ฌํ•˜๊ธฐ๋ž‘ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์–ด์„œ ์กฐ๊ธˆ ์‰ฝ๊ฒŒ ํ’€์ง€ ์•Š์•˜๋‚˜ ์‹ถ๋‹ค..ใ…Žใ…Ž ํ•˜์ง€๋งŒ ์ด๋Ÿฐ๋‚ ๋„ ์žˆ๋Š”๊ฑฐ์ง€...ใ…Žใ…Ž

์ฝ”๋“œ

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

public class BOJ11651 {
    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());

        // ์ขŒํ‘œ ๊ฐ’ ์ €์žฅํ•  ๋ฐฐ์—ด
        int arr[][] = new int[N][2];

        // ์ž…๋ ฅ ๊ฐ’์„ ๋ฐฐ์—ด์— ์ €์žฅ
        for(int i = 0; i < N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());

            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = Integer.parseInt(st.nextToken());
        }

        // ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
        Arrays.sort(arr, (n1, n2) -> {
            // y๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ ๋งŒ์•ฝ ๋น„๊ตํ•˜๋Š” ๋‘ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด
            // x๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
            if((n1[1] - n2[1]) == 0){
                return n1[0] - n2[0];
            }

            return n1[1] - n2[1];
        });

        for(int i = 0; i < N; i++){
            sb.append(arr[i][0] + " " + arr[i][1] + "\n");
        }

        System.out.println(sb);
    }
}