N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
❌
Arrays.sort()
메서드는dual-pivot-Quicksort
를 수행하는데, 보통 퀵 정렬의 평균 시간복잡도는O(nlogn)
이지만 최악 시간복잡도가O(n^2)
이므로 해당 메서드를 사용하면 시간 초과가 뜨게 된다!
✅
Collections.sort()
메서드는TimeSort
를 수행하는데, 해당 정렬의 평균 시간복잡도는O(n)
, 최악 시간복잡도는O(nlogn)
이므로 제한시간 내에 문제 해결이 가능하다!
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));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
List<Integer> list = new ArrayList<>();
for(int i=0;i<n;i++) {
list.add(Integer.parseInt(br.readLine()));
}
Collections.sort(list);
for(int i=0;i<n;i++) {
sb.append(list.get(i)).append("\n");
}
bw.write(sb + "");
br.close();
bw.close();
}
}
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
- 시간 제한 : 3초
- 메모리 제한 : 512MB
✅ 이번 문제는
Arrays.sort()
를 사용하니 풀리긴 풀렸다!엄청 간당간당하게,,
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));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
for(int i=0;i<n;i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
for(int i=0;i<n;i++) {
sb.append(arr[i]).append("\n");
}
bw.write(sb + "");
br.close();
bw.close();
}
}
➕ 문제 설명에 적힌 걸 보니 카운팅 정렬을 사용하면 좀 더 널널하게 풀 수 있는 것 같아서 [ 구글링 1 & 구글링 2 ] 를 참고하여 풀어봤다.
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));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[] cnt = new int[10001];
for(int i=0;i<n;i++) {
cnt[Integer.parseInt(br.readLine())]++;
}
for(int i=1;i<=10000;i++) {
while(cnt[i] > 0) {
sb.append(i).append("\n");
cnt[i]--;
}
}
bw.write(sb + "");
br.close();
bw.flush();
bw.close();
}
}