
import java.io.*;
import java.util.*;
public class Main{
static int [][] arr;
static int n;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n =Integer.parseInt(br.readLine());
arr = new int[n][2];
for(int i=0;i<n;i++){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
arr[i][0] = x;
arr[i][1] = y;
}
sort(arr);
}
public static void sort(int[][] arr){
Arrays.sort(arr,new Comparator<int []>(){
@Override
public int compare(int [] o1, int[] o2){
if(o1[0]==o2[0]){
return o1[1]-o2[1];
}else
return o1[0]-o2[0];
}
});
for(int i=0;i<n;i++){
System.out.println(arr[i][0]+" "+arr[i][1]);
}
}
}

처음에 배열초기화를 arr = new int[n][n];했더니 메모리 초과가 나왔다..
아래는 람다식 사용 코드
import java.io.*;
import java.util.*;
public class Main{
static int [][] arr;
static int n;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
n =Integer.parseInt(br.readLine());
arr = new int[n][2];
for(int i=0;i<n;i++){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
arr[i][0] = x;
arr[i][1] = y;
}
sort(arr);
}
public static void sort(int[][] arr){
Arrays.sort(arr,(o1,o2)->{
if(o1[0]==o2[0]){
return o1[1]-o2[1];
}else
return o1[0]-o2[0];
});
for(int i=0;i<n;i++){
System.out.println(arr[i][0]+" "+arr[i][1]);
}
}
}