본문 바로가기
알고리즘/문제풀이

[JAVA]백준 - 11650.좌표 정렬하기(Arrays.sort / compare 오버라이딩)

by 겅아링 2020. 11. 9.
반응형

www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

 

풀이 > 

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

public class Baekjoon11650 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int count = Integer.parseInt(br.readLine());
        int[][] array = new int[count][2];
        for (int i = 0; i < count; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            array[i][0] = Integer.parseInt(st.nextToken());
            array[i][1] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(array, (o1, o2) -> {
            if (o1[0] == o2[0]) return Integer.compare(o1[1], o2[1]);
            return Integer.compare(o1[0], o2[0]);
        });

        for (int[] is : array) 
        	bw.append(String.valueOf(is[0])).append(" ").append(String.valueOf(is[1])).append("\n");

        bw.flush();
        br.close();
        bw.close();
    }
}

 

객체 배열의 값을 정렬할때 Overriding 해야하는 Comparator 의 compare 메소드 사용법

//람다식 표현 
 Arrays.sort(array, (o1, o2) -> {
            if (o1[0] == o2[0]) return Integer.compare(o1[1], o2[1]);
            return Integer.compare(o1[0], o2[0]);
        });

첫번째 인자와 두번째 인자를 비교하는 부분을 재정의한다.

음수값을 리턴하면 두 객체의 자리를 바꾸고 (내림차순)

0이나 양수가 리턴되면 자리는 바뀌지 않는다!

 

+Integer.compare(x,y)

x와 y를 비교해 x값이 y값보다 작으면 -1리턴.

같거나, x가 y보다 크다면 0 리턴

 

반응형