_

Always be tactful

프로그래밍/풀었어, 백준

[Java] 백준 11650번: 람다 표현식

funczun 2025. 1. 16. 01:16
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Problem11650 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[][] coordinates = new int[N][2]; // [x, y] N개

        StringTokenizer st;

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            coordinates[i][0] = Integer.parseInt(st.nextToken()); // x
            coordinates[i][1] = Integer.parseInt(st.nextToken()); // y
        }

        // 정렬 조건 부여
        Arrays.sort(coordinates, (a, b) -> {
            if (a[0] != b[0]) {
                return a[0] - b[0]; // x 값 기준 오름차순 정렬
            } else {
                return a[1] - b[1]; // y 값 기준 오름차순 정렬
            }
        });

        // 출력
        for (int[] coord : coordinates) {
            System.out.println(coord[0] + " " + coord[1]);
        }
    }
}

키 포인트

 

 Arrays.sort()는 정렬 메서드다. 기본적으로는 오름차순으로 정렬하나, 두 번째 파라미터로 정렬 기준을 제공할 수 있다. 위 코드에서는, 두 번째 파라미터에 해당하는 (a, b) -> { ... }는 람다 표현식을 사용해 마치 Comparator 인터페이스의 compare() 메서드를 구현한다. if 문에서 x 값이 다른 경우 x 값을 기준으로 오름차순 정렬하고, x 값이 같은 경우 y 값을 기준으로 오름차순 정렬한다.

 

 a[0] - b[0]가 양수가 되면, 이는 a가 b보다 크다는 의미로 해석되어 a가 뒤로 가야 한다는 뜻이다. 당연하게도 0인 경우 바뀌지 않고, 음수인 경우 a가 앞에 가야 한다는 뜻이다. 두 숫자 사이 차이를 계산하여 반환하는 방식은 Comparator에서 요구하는 정렬 기준을 따르는 방식이므로, 오름차순 정렬이다.

728x90