티스토리 뷰

www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

Comparable vs Compartor

🔶 java.lang.Comparable
> 정렬이 안되는 객체를 정렬 가능하게 한다. + 정렬 기준을 설정한다.

1. Comparable은 기본형 정렬에 사용하지 않는다 → 정렬 기준이 없는 객체(Object)를 정렬 가능하게 만들어주는 것이다.

2. Comparable은 다른 타입끼리도 비교가 가능하다.

 

🔶 java.util.Comparator
> 기본 정렬 기준과 다르게 정의하고 싶을 때 사용한다.

외부 정렬 기준을 정의하는 것이다. 그래서 매개변수가 2개이다.

 

Comparble + 정의한 Object

import java.io.*;
import java.util.StringTokenizer;
import java.util.Arrays;

// 210327

// 1. Comparable
// - Comparable은 java.lang (기본) 패키지 안에 있어 import 없이 사용 가능하다.
// - Comparable은 정렬 기준이 없는 객체(Object)에 정렬 기준을 만들어 주는 것이다.
// - Comparable은 기본 자료형에 쓰지 않는다.

public class Main_BJ_11650_좌표정렬하기_Comparable {

    static class Pos implements Comparable<Pos>{
        int x, y;

        public Pos(int x, int y) {
            this.x = x;
            this.y = y;
        }

        @Override
        public int compareTo(Pos o) {
            if(Integer.compare(this.x, o.x) == 0) {
                return Integer.compare(this.y, o.y);
            }
            return Integer.compare(this.x, o.x);
        }
    }

    public static void main(String[] args) throws Exception {;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;
        int N = stoi(br.readLine());
        Pos[] arr = new Pos[N];

        int x, y;
        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            x = stoi(st.nextToken());
            y = stoi(st.nextToken());
            arr[i] = new Pos(x, y);
        }

        Arrays.sort(arr);

        // 출력
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<N; i++) {
            sb.append(arr[i].x + " " + arr[i].y + "\n");
        }

        System.out.println(sb.toString());

        br.close();
    }

    static int stoi(String str) {
        return Integer.parseInt(str);
    }
}

Comparator + 기본 자료형 + 익명 내부 클래스

import java.io.*;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.Comparator;;

// 210327

// 2. Comparator
// - Comparator는 java.util 패키지 안에 있는 '외부 정렬 기준'이다.
// - Comparator는 기본 정렬 기준과 다른 정렬 기준을 만들 때 사용한다.

public class Main_BJ_11650_좌표정렬하기_Comparator {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;
        int N = stoi(br.readLine());
        int[][] arr = new int[N][2];

        int x, y;
        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            x = stoi(st.nextToken());
            y = stoi(st.nextToken());
            arr[i][0] = x;
            arr[i][1] = y;
        }

        Arrays.sort(arr, new Comparator<int[]>() {
        @Override
            public int compare(int[] o1, int[] o2) {
                if (o1[0] == o2[0]) {
                    return Integer.compare(o1[1], o2[1]);
                }
                return Integer.compare(o1[0], o2[0]);
            }
        });

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

        System.out.println(sb.toString());

        br.close();
    }

    static int stoi(String str) {
        return Integer.parseInt(str);
    }
}

'코딩테스트 > 백준' 카테고리의 다른 글

[BJ] 1181. 단어 정렬  (0) 2021.03.28
[BJ] 11651. 좌표 정렬하기2  (0) 2021.03.28
[BJ] 14502. 연구소  (0) 2021.03.26
[BJ] 1600. 말이 되고픈 원숭이  (0) 2021.03.24
[BJ] 1149. RGB 거리  (0) 2021.03.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함