본문 바로가기
백준 Algorithm/백준 CLASS2

[백준] CLASS2 11650 좌표 정렬하기 - JAVA [자바]

by Echung 2023. 10. 15.

 안녕하세요. 이번에는 백준 11650 좌표 정렬하기 문제를 풀어보려고 합니다.

 

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


Problem

2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

사진 1. 문제


Solution

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

public class Main {
    
    static int[][] arr;
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        int N = Integer.parseInt(br.readLine());
        arr = new int[N][2];
        
        StringTokenizer st;
        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            
            arr[i][0] = Integer.parseInt(st.nextToken());
            arr[i][1] = Integer.parseInt(st.nextToken());
        }
        
        Arrays.sort(arr, (s1, s2) -> {
            if(s1[0] == s2[0]) {
                return s1[1] - s2[1];
            } else {
                return s1[0] - s2[0];
            }
        });
        
        for(int i = 0; i < N; i++) {
            sb.append(arr[i][0] + " " + arr[i][1]).append("\n");
        }
        
        System.out.println(sb.toString());
    }
}

 이번 문제는 좌표 정렬하기 문제이다. 이번 문제도 기존에 포스팅했던 나이순 정렬 문제와 크게 다른 게 없는 문제이다. 만약 나이순 정렬 문제를 안 풀어봤으면 풀어보길 권장한다.

 

나이순 정렬 문제 링크

https://echung93.tistory.com/42

 

[백준] CLASS2 10814 나이순 정렬 - JAVA [자바]

안녕하세요. 이번에는 백준 10814 나이순 정렬 문제를 풀어보려고 합니다. https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어

echung93.tistory.com

 

 Arrays.sort 기능을 이용해서 Comparator 람다를 사용해서 x좌표가 같으면 y 좌표를 기준으로 오름 차순을 정렬하는 코드와 x좌표가 다르면 x좌표를 오름 차순으로 정렬하는 코드를 작성해주면 해결된다.

Arrays.sort(arr, (s1, s2) -> {
            if(s1[0] == s2[0]) {
                return s1[1] - s2[1];
            } else {
                return s1[0] - s2[0];
            }
        });

Performance

사진 2. 실행 결과

반응형