본문 바로가기

Study/Algorithm 문제

[11650] 좌표 정렬하기 Java, Python

문제


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

 

입력


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

 

출력



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

 

Java


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 점의 개수
        int len = Integer.parseInt(br.readLine());

        // 좌표를 넣어줄 2차원 배열 선언, 초기화
        int[][] numArr = new int [len][2];

        // BufferedReader를 사용해서 줄단위로 읽은 문자열을 토큰으로 끊고 숫자로 바꿔서 배열에 각각 넣기
        StringTokenizer st;
        for (int i = 0; i < numArr.length; i++) {
            st = new StringTokenizer(br.readLine());
            numArr[i][0] = Integer.parseInt(st.nextToken());
            numArr[i][1] = Integer.parseInt(st.nextToken());
        }

        // 정렬
        // Arrays.sort(numArr, (num1, num2) -> {
        //     if (num1[0] == num2[0]) {
        //         return num1[1] - num2[1];
        //     } else {
        //         return num1[0] - num2[0];
        //     }
        // });

        Arrays.sort(numArr, new Comparator<int[]>() {

            @Override
            public int compare(int[] num1, int[] num2) {
                if (num1[0] == num2[0]) {
                    return num1[1] - num2[1];
                } else {
                    return num1[0] - num2[0];
                }
            }

        });


        // StringBuilder로 결과 작성
        StringBuilder sb = new StringBuilder();
        for (int j = 0; j < numArr.length; j++) {
            sb.append(numArr[j][0] + " " + numArr[j][1]).append("\n");
        }

        // 출력
        System.out.println(sb);
    }
}

 

Python


# 좌표를 넣어줄 배열
numArr = [list(map(int, input().split())) for _ in range(int(input()))]

# 정렬
numArr.sort(key=lambda num: (num[0], num[1]))

# 출력
for i in numArr:
    print(i[0], i[1])

'Study > Algorithm 문제' 카테고리의 다른 글

BOJ5598 : 카이사르 암호 Java, Kotlin  (0) 2022.02.18