반응형
-내 생각
정렬로 분류되어 있는 문제로 다른 정렬 문제들과 마찬가지로 풀면 되는데 처음에는 2차원 배열을 사용할 때 나이, 이름값뿐만 아니라 별도의 가입 순 값을 저장해서 나이가 같으면 해당 값을 기준으로 정렬을 수행한 결과를 제출했는데, 계속 오답처리가 나서 다른 분들의 풀이를 살짝 봤더니 문제점을 알았다....
-해법
우선 별도의 가입 순 데이터를 저장할 필요가 없는 게, 애초에 입력을 가입 순으로 한다고 명시되어 있기 때문에 결국 모든 데이터가 입력된 2차원 배열의 데이터들은 가입 순으로 정렬이 되어있는 것이나 마찬가지다. 그러므로 나이순으로만 정렬을 해준다면, 나이가 같을 경우 별도의 조작이 필요 없는 것이었다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n= sc.nextInt();
String arr[][]=new String[n][2]; // 나이, 이름
for(int i=0;i<arr.length;i++) {
for(int j=0;j<2;j++) {
arr[i][j] = sc.next();
}
}
Arrays.sort(arr,new Comparator<String[]>() { // 0:나이 , 1:이름
@Override
public int compare(String[] o1,String[] o2) {
return Integer.compare(Integer.parseInt(o1[0]), Integer.parseInt(o2[0]));
}
});
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i][0]+" "+arr[i][1]);
}
}
}
이 문제를 다시 풀었는데, 당시에 풀 때 겪었던 문제점을 똑같이 겪었다. ㅋㅋㅋㅋ 가입 순서는 고려할 필요가 없다! 나이순으로 정렬하면 같은 경우는 바뀌지 않기 때문에 가입 순서에 문제는 없다.
반응형