문제 출처: https://www.acmicpc.net/problem/11651
2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력 예시
5
0 4
1 2
1 -1
2 2
3 3
출력 예시
1 -1
1 2
2 2
3 3
0 4
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
public static void main(String [] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int total = Integer.parseInt(br.readLine());
ArrayList<Integer []> xy = new ArrayList<>();
for(int i = 0; i < total; i++) {
Integer [] temp = new Integer[2];
StringTokenizer st = new StringTokenizer(br.readLine());
temp[0] = Integer.parseInt(st.nextToken());
temp[1] = Integer.parseInt(st.nextToken());
xy.add(temp);
}
xy.sort((o1, o2) -> {
if(o1[1] > o2[1]) {
return 1;
} else if(o1[1].equals(o2[1])) {
if(o1[0] < o2[0])
return -1;
return 1;
} else
return -1;
});
StringBuilder sb = new StringBuilder();
for(Integer [] i : xy)
sb.append(i[0]).append(" ").append(i[1]).append("\n");
System.out.println(sb);
}
}
ArrayList에 sort를 재정의 해서 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int howmany=Integer.parseInt(br.readLine());
int[][] arr=new int [howmany][2];
StringBuilder sb=new StringBuilder();
for(int i=0;i<howmany;i++) {
StringTokenizer st=new StringTokenizer(br.readLine()," ",false);
int x=Integer.parseInt(st.nextToken());
int y=Integer.parseInt(st.nextToken());
arr[i][0]=y;
arr[i][1]=x;
}
Arrays.sort(arr,(prev,next)->{
if(prev[0]==next[0]) {
return (prev[1]-next[1]);
}else{
return prev[0]-next[0];
}
});
for(int i=0;i<arr.length;i++) {
sb.append(arr[i][1]).append(' ').append(arr[i][0]).append('\n');
}
System.out.println(sb);
}
}
Array를 sort로 한게 내꺼보다 조금 더 빨라서 가져왔다. 이렇게도 할 수 있는줄은 몰랏는데 참고해야겠다.