[작성일: 2023. 10. 16]
https://www.acmicpc.net/problem/2751
풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.valueOf(br.readLine());
List<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
list.add(Integer.valueOf(st.nextToken()));
}
Collections.sort(list);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int num : list) {
bw.write(num + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
이 문제는 Arrays.sort로 풀면 시간초과가 뜬다.
처음에는 Scanner랑 sysout이 문제인가? 싶어서 BufferedReader와 BufferedWriter 코드를 바꿔서 풀었지만 그대로 시간초과가 떴다.
Arrays.sort는 퀵정렬을 기반으로 하기 때문에 최악의 경우 시간복잡도는 O(n2)가 될 수 있다. 이 문제에서는 n이 1,000,000까지 갈 수 있기 때문에 시간초과가 난 것이다.
배열 대신 List를 사용하고 Collections에 있는 sort를 쓰면 되는데, Collections.sort()의 시간복잡도는 O(nlogn)이므로 제한 시간 안에 문제를 수 있다.