시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
2 초 | 256 MB | 369624 | 115089 | 80688 | 31.510% |
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력 1 복사
5
5
4
3
2
1
예제 출력 1 복사
1
2
3
4
5
딱히 어려울 건 없는 문제이다.
처음에는 TreeMap 연습할 겸 대충 풀려다가 안되어서 다른 방법을 선택하게 되었다.
TreeMap이 아무리 최악이더라도 삽입/출력 시 O(log n)의 시간 복잡도를 가져 최종 결과를 출력할 때만 빠르게 한다면 되지 않을까 싶었는데.
BufferedWriter를 썼을 경우 NullPointerException이 나와 안되고 StringBuilder를 쓰면 틀렸다고만 나왔다.
아무튼 그래서 방향을 틀어서 Collections의 sort를 이용하기로 했다.
- Collections.sort는 O(n) ~ O(nlogn) 시간 복잡도를 가지고 있다.
- Arrays.sort는 최악의 경우 O(n^2) 까지 시간 복잡도가 올라가기 때문에 사용하지 않았다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class BOJ2751_SortNumbers2 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 리스트 선언
List<Integer> list = new ArrayList<>();
// 리스트에 정수 입력
for(int i=1;i<=n;i++){
list.add(Integer.parseInt(br.readLine()));
}
// 정렬
Collections.sort(list);
// StringBuilder로 출력
StringBuilder sb = new StringBuilder();
for(int val : list){
sb.append(val).append("\n");
}
System.out.print(sb);
}
}
'공부 > 코딩 테스트' 카테고리의 다른 글
Java) Leetcode 17. Letter Combinations of a Phone Number (백트랙킹) (7) | 2025.04.11 |
---|---|
Java) Leetcode 5. Longest Palindromic Substring (DP 풀이) (1) | 2025.04.08 |
[Java] LeetCode 20. Valid Parentheses (0) | 2025.04.03 |
[Java] Long의 바이너리 값 팰린드롬 구하기 (0) | 2025.04.02 |
[Java] N번째 거듭제곱 수열 구하기 (0) | 2025.04.02 |