문제 풀이/[JAVA_자바] 백준

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

Seunghyun_KO 2022. 1. 3. 09:00
728x90
반응형

문제

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


입력

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


출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.


 


문제 접근 방법

다음 문제는 2차원 리스트를 정렬하는 문제이다.

x좌표 먼저 오름차순으로 만약 x좌표가 같다면 y좌표 오름차순으로 정렬을 해주면 된다.

이때, java내장 함수 중에 Arrays.sort() 함수를 이용해주면 쉽게 풀 수 있다.

1차원 배열의 정렬은 단순히 Arrays.sort(리스트_명) 이렇게 사용해주면 되지만, 2차원 배열의 정렬은 함수를 조금 수정해주어야 한다(@override).


JAVA 코드 풀이

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

public class Main {
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        StringTokenizer st;
        int coordinate[][] = new int[num][2];
        for(int i=0; i<num; i++){
            st = new StringTokenizer(br.readLine());
            coordinate[i][0] = Integer.parseInt(st.nextToken());
            coordinate[i][1] = Integer.parseInt(st.nextToken());
        }
        int temp;
        Arrays.sort(coordinate, new Comparator<int[]>(){
        	@override
            public int compare(int n1[], int n2[]){
                if(n1[0] == n2[0])
                    return n1[1]-n2[1];
                else
                    return n1[0]-n2[0];
            }
        });
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        for(int i=0; i<num; i++){
            bw.write(coordinate[i][0]+" "+coordinate[i][1]+"\n");
        }
        bw.close();
    }
}

코드 실행 결과


후기

위 문제는 java내장 함수 Arrays.sort()를 이용하여 쉽게 풀었다.

2차원 배열일 때 정렬은 내장 함수를 @override해서 새로 작성해주면 2차원 배열에서도 Arrays.sort() 함수를 사용할 수 있다는 것을 알았다. override 한 함수를 이해해서 나중에 다른 문제에서도 사용할 수 있도록 노력해야겠다.

또한, 자바 내장 함수를 사용할 때 그 함수들은 어떤 원리로, 어떤 알고리즘으로 구성되어있는지도 나중에 공부해보도록 하겠다.(효율성 측면에서 어떤 경우는 사용하는 게 이득일 수도 있고 아닐 수도 있기 때문이다.)

 


문제 원본

https://www.acmicpc.net/problem/11650

728x90
반응형