[백준 문제 풀이] 11650번 좌표 정렬하기

Junu Kim·2025년 12월 29일
post-thumbnail

[11650] 좌표 정렬하기

난이도: ★★☆☆☆ • solved on: 2025-12-29


문제 요약

  • 문제 유형: 정렬(Sorting), 구현
  • 요구사항: N개의 점을 x 오름차순, x가 같으면 y 오름차순으로 정렬해 출력한다.

사용 개념

  1. 자료구조

    • int[][] : 좌표 저장
  2. 알고리즘/기법

    • 커스텀 정렬 기준 (Comparator) 기반 정렬
  3. 핵심 키워드

    • 다중 키 정렬 (multi-key sort), 비교 함수 (comparator)

풀이 아이디어

  1. 문제 분해
  • 커스텀한 Comparator를 활용한다.
  • (x, y) 좌표쌍을 배열에 저장한다.
  • 정렬 기준을 x -> y 순으로 정의한다.
  1. 핵심 로직 흐름

    입력 N
    좌표 N개를 arr[i][0]=x, arr[i][1]=y에 저장
    Arrays.sort(arr, (a,b) -> a[0] 다르면 a[0]-b[0], 같으면 a[1]-b[1])
    정렬된 순서대로 출력
  2. 예외 처리

    • 특별한 예외 처리 없음 (입력 범위 내에서 정렬만 수행)

코드

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[][] arr = new int[n][2];
        for(int i = 0; i < n; i++){
            String[] temp = br.readLine().split(" ");
            int x = Integer.parseInt(temp[0]);
            int y = Integer.parseInt(temp[1]);
            arr[i][0] = x;
            arr[i][1] = y;
        }
        Arrays.sort(arr, new AxisComparator());

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < n; i++){
            sb.append(arr[i][0] + " ");
            sb.append(arr[i][1] + "\n");
        }
        System.out.println(sb);
    }

    public static class AxisComparator implements Comparator<int[]>{
        @Override
        public int compare(int[] o1, int[] o2) {
            if(o1[0] != o2[0]){
                return o1[0] - o2[0];
            }
            if(o1[1] != o2[1]){
                return o1[1] - o2[1];
            }
            return 0;
        }

    }
}

시간·공간 복잡도

  • 시간 복잡도: O(N log N)
  • 공간 복잡도: O(N)

어려웠던 점

  • 없음

배운 점 및 팁

  • 입력 파싱을 split() 대신 StringTokenizer로 바꾸면 메모리/시간이 더 안정적일 수 있다. (특히 N=100,000)
  • 비교에서 o1[0] - o2[0] 대신 Integer.compare(o1[0], o2[0])를 쓰면 오버플로우 위험을 일반적으로 피할 수 있다. (이 문제 범위에서는 큰 문제는 잘 안 생김)

참고 및 링크


추가 연습 문제

profile
생각이 현실이 될 수 있도록 노력하는 중입니다.

0개의 댓글