본문 바로가기
BOJ

[BOJ] [JAVA] 11650번 좌표 정렬하기

by Parsler 2023. 12. 28.
 

11650번: 좌표 정렬하기

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

www.acmicpc.net

이상하게 풀었다가 시간 초과나서 못풀고 있었다.

답 찾아보다가 람다식이라는 걸 쓴다는 걸 알았는데 공부할 시간이 없어서 놓고 있다가 이제야 다시 했다!

실은 파이썬 공부하다가 람다가 나왔는데 파이썬으로 람다를 보니깐 이해가 살짝 되는 것 같았다!

그러고 갑자기 문제가 생각나서 자바로 풀어봤다!

대에충 이해한 거는 Arrays.sort에 arr를 넣고 그 다음 인자에 함수를 넣어서 변형(?)할 수 있다.

때문에 두 수의 차를 구해서 정렬하는 기존 sort에서 내가 원하는 기준으로 바꿔서 정렬을 할 수 있다!

이 때, sort(arr, 함수)에 들어가는 함수를 람다식으로 넣어준 것이다! (e1, e2) -> {어쩌구...}

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [][] arr = new int[n][2];
        for (int i = 0; i < n; i++) {
            arr[i][0] = sc.nextInt();
            arr[i][1] = sc.nextInt();
        }

        Arrays.sort(arr, (e1, e2) -> {
            if (e1[0] == e2[0]) {
                return e1[1] - e2[1];
            } else {
                return e1[0] - e2[0];
            }
        });
        for (int i = 0; i < n; i++) {
            System.out.println(arr[i][0] + " " + arr[i][1]);
        }
    }
}

두고두고 헷갈릴 문제이다. ㅋㅋ 

자주 봐야겠따