문제 해석
- 이 문제는 전 11650번 좌표정렬하기POST와 거의 똑같은 문제이다.
- 전 POST에서는 x를 기준으로 정렬하였다면, 이번 POST 11651문제에선 y를 기준으로 작은수 -> 큰수 정렬하고, 만약 y값이 같다면 x를 비교하여 x가 작은 수 -> 큰 수가 되도록 정렬한다.
코드1
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st ;
int N = Integer.parseInt(br.readLine());
int[][] arrays = new int[N][2];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
arrays[i][0] = Integer.parseInt(st.nextToken());
arrays[i][1] = Integer.parseInt(st.nextToken());
}
br.close();
Arrays.sort(arrays, (num1, num2) -> {
return num1[1]!=num2[1] ? num1[1]-num2[1] : num1[0]-num2[0];
});
for(int i = 0; i < N; i++){
bw.write(arrays[i][0] + " " + arrays[i][1] +"\n");
}
bw.flush();
bw.close();
}
}
결과1
코드2
import javafx.scene.layout.CornerRadii;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st ;
ArrayList<Coordinate> coorList = new ArrayList<Coordinate>();
int N = Integer.parseInt(br.readLine());
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
coorList.add(new Coordinate(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
}
br.close();
Collections.sort(coorList);
for(int i = 0; i < N; i++){
bw.write(coorList.get(i).toString());
}
bw.flush();
bw.close();
}
}
class Coordinate implements Comparable<Coordinate>{
int x ;
int y;
public Coordinate(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int compareTo(Coordinate o) {
if (this.y != o.y) return this.y - o.y;
else return this.x - o.x;
}
public String toString() {
return x + " " + y + "\n";
}
}
결과2
느낀점
- 시간이 많이 소요되어서 다른 분의 맞힌코드부분을 봤는데, 입력받는 함수와, 비교하는 클래스를 직접 구현하여 처리하는 것 같았다.그래서, 그 방법을 사용해서 코드를 작성해 봤는데 확실히 시간이 줄긴 줄었다..
- Collentions.sort()이 익숙하지 않아서 생각하지 못한 방법이었다.