문제 제목 아래의 설명란 같은 곳에 언어에 내장된 함수를 쓰는 걸 추천한다기에
Arrays.sort()를 썼는데 시간초과가 나왔다.
코드는
1. N을 입력받는다.
2. N개의 수를 입력받아 배열에 저장한다
3. Arrays.sort()로 정렬한다.
4. System.out.println()으로 배열의 값을 출력한다.
이렇게 구성했는데 4번에서 시간이 오래 걸리는 게 아닌가 하고
StringBuilder를 사용했더니 어찌저찌 통과가 되긴 했다.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Arrays;
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());
int[] arr = new int[N];
for(int i=0;i<N;i++){
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
for(int val : arr){
sb.append(val).append('\n');
}
System.out.print(sb);
}
}
이 Arrays.sort()는 dual-pivot Quicksort를 써서
평균적으로는 시간복잡도가 O(nlogn)이지만
최악의 경우에는 O(n^2)라고 한다.
이것보다 더 빠르게 정렬을 수행할 수 있는 메서드가 Collections.sort()이다.
Collections.sort()는 Timsort인데,
Timesort는 합병정렬의 최악의 경우와 삽입정렬의 최선의 경우를 섞은 알고리즘으로
O(n)~O(nlogn)을 보장한다는 장점이 있다.
이를 사용하려면 배열이 아닌 List 계열의 자료구조를 사용해 정렬해야 한다.
정렬 메서드와 알고리즘에 대한 내용을 참고한 포스트 ↓
https://st-lab.tistory.com/106
[백준] 2751번 : 수 정렬하기 2 - JAVA [자바]
www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이..
st-lab.tistory.com
위에서 언급한 Collections.sort()를 이용한 코드는 다음과 같다.
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
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());
ArrayList<Integer> list = new ArrayList<>();
for(int i=0;i<N;i++){
list.add(Integer.parseInt(br.readLine()));
}
Collections.sort(list);
StringBuilder sb = new StringBuilder();
for(int val : list){
sb.append(val).append('\n');
}
System.out.print(sb);
}
}
'Algorithm > [BOJ] - JAVA' 카테고리의 다른 글
[백준] 2108 : 통계학 JAVA 풀이 (0) | 2022.05.26 |
---|---|
[백준] 10989 : 수 정렬하기 3 JAVA 풀이 (0) | 2022.05.26 |
[백준] 1436 : 영화감독 숌 JAVA 풀이 (0) | 2022.05.24 |
[백준] 2231 : 분해합 JAVA 풀이 (0) | 2022.05.24 |
[백준] 2750 : 수 정렬하기 JAVA 풀이 (0) | 2022.05.24 |