본문 바로가기
🧑‍💻코딩 테스트/백준 (BOJ)

[코딩 테스트/백준 알고리즘] 11650번 : 좌표 정렬하기 (Java 풀이)

by 코코의 주인 2022. 8. 1.

문제

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

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net


문제 설명


문제 풀이

 문제의 조건에 맞게 Comparator를 구현해준다.

 

참고: 2022.08.01 - [✏️Java 공부/기타 등등] - [Java 공부/기타] 객체 정렬하기 (Comparable & Comparator)

 

[Java 공부/기타] 객체 정렬하기 (Comparable & Comparator)

 백준 문제를 풀다 보면 정렬이 필요한 문제가 종종 나온다. 대부분의 경우 Arrays.sort()나 Collections.sort()를 호출하여 해결할 수 있지만 정렬에 추가적인 조건이 붙었거나, 사용자가 정의한 객체를

cocoiscat.tistory.com

 


코드

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

class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[][] arr = new int[N][2];
        for(int i = 0; i < N; i++) {
            String str1 = br.readLine();
            String[] str2 = str1.split(" ");
            arr[i][0] = Integer.parseInt(str2[0]);
            arr[i][1] = Integer.parseInt(str2[1]);
        }
        Arrays.sort(arr, new Comparator<int[]>() {
            public int compare(int[] arr1, int[] arr2) {
                if(arr1[0] == arr2[0]){
                    return arr1[1] - arr2[1];
                }
                else{
                    return arr1[0] - arr2[0];
                }
            }
        });

        for(int i =0; i < N; i++) {
            System.out.println(arr[i][0] + " " + arr[i][1]);
        }

    }
}

댓글