문제
풀이
Arrays.sort() 라는 함수를 사용하여 정렬하여 볼 것이다.
이 함수는 기본적으로 오름차순으로 정렬을 한다. 하지만 정렬하는 방법은 comparator안의 함수를 override함에 따라 바꿀 수 있다.
Comparator 의 return 값이 <=0 -> 바꾸지 않는다
return 값이 >0 -> 바꾼다
문제는 배열에 String값이 2개가 들어가면 그값을 어떻게 비교하냐 이다.
방법은 Compartor를 override하여 안에서 나이 값만 Int형으로 바꿔서 비교하면 되는 것이다.
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));
int N = Integer.parseInt(br.readLine());
String list[][]=new String[N][2];
for (int i = 0; i < N; i++) {
StringTokenizer st= new StringTokenizer(br.readLine());
list[i][0]=st.nextToken();
list[i][1]=st.nextToken();
}
Arrays.sort(list, new Comparator<String[]>() {
@Override // o1 의 값이 o2보다 작거나 같으면 0이나 음수가 리턴됨으로 바뀌지 않는다
public int compare(String[] o1, String[] o2) {
return Integer.parseInt(o1[0])-Integer.parseInt(o2[0]);
}
});
for(String[] a : list)
System.out.println(a[0]+" "+a[1]);
}
}
피드백
처음엔 quick sort알고리즘을 직접 구현해 보려 했지만 시간복잡도가 n^2이 될 수도 있기 때문에 시간초과가 떳다.
그래서 그냥 자바 라이브러리 함수를 쓰게 되었다.
'자료구조 알고리즘 > 이분 탐색' 카테고리의 다른 글
이분탐색 (백준 10816 숫자 카드2) (0) | 2023.05.30 |
---|