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

자료구조
int[][] : 좌표 저장알고리즘/기법
핵심 키워드
- 문제 분해
- 커스텀한
Comparator를 활용한다.- (x, y) 좌표쌍을 배열에 저장한다.
- 정렬 기준을
x -> y순으로 정의한다.
핵심 로직 흐름
입력 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]) 정렬된 순서대로 출력예외 처리
- 특별한 예외 처리 없음 (입력 범위 내에서 정렬만 수행)
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])를 쓰면 오버플로우 위험을 일반적으로 피할 수 있다. (이 문제 범위에서는 큰 문제는 잘 안 생김)비슷한 유형 (GPT 추천)
확장 문제 (GPT 추천)