728x90
▶11650문제 - 좌표 정렬하기
▶ 풀이 과정
import java.io.*;
import java.util.*;
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));
int count = Integer.parseInt(br.readLine());//입력받을 횟수
int[][] arr = new int[count][count];
for(int i = 0 ; i < count; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr, (a1, a2) ->{
if(a1[0] == a2[0]) {
return Integer.compare(a1[1], a2[1]);
}else {
return Integer.compare(a1[0], a2[0]);
}
} );
for(int i = 0; i < count; i++) {
bw.write(String.valueOf(arr[i][0] + " " + arr[i][1]) + "\n");
}
bw.flush();
bw.close();
br.close();
}
}
** 알아둬야 할것**
- 2차원 배열 정렬(배열, 람다식)
Arrays.sort(배열이름, (o1, o2) ->{
if(o1[0] == o2[0]){ //arr[n1][] == arr[n1+1][] 1차원 배열에 있는 값 같으면
return Integer.compare(o1[1],o1[1]); //arr[n1][n2], arr[n1+1][n2+1] 2차원 배열 값 비교
}else{
return Integer.compare(o1[0], o2[1]); //arr[n1][], arr[n1+1][] 1차원 배열 값 비교
}
});
- 2차원 배열 정렬2
Arrays.sort(arr, new Comparator<int[]> (){
@Override
public int compare(int[] o1, int[] o2){
if(o1[0] == o2[0]){
return Integer.compare(o1[1], o2[1]);
}else{
return Integer.compare(o1[0], o2[0]);
}
}
});
** 틀렸던 이유 **
import java.io.*;
import java.util.*;
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));
int count = Integer.parseInt(br.readLine());//입력받을 횟수
String[] arr = new String[count];
for(int i = 0 ; i < count; i++) {
arr[i] = br.readLine();
}
Arrays.sort(arr);
for(int i = 0; i < count; i++) {
bw.write(arr[i]+ "\n");
}
bw.flush();
bw.close();
br.close();
}
}
- 위의 방법대로 풀 경우 String 배열은 음수 양수를 구분하지 못해 음수일 경우 -2 > -1로 인식해 오답이 출력됨.
- 따라서 int형 2차원 배열로 바꿔서 풀었음.
728x90