'백준 2751번 자바'에 해당되는 글 1건

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
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);

    }
}

 

블로그 이미지

Ahan

책, 영화, 게임! 인생의 활력 요소가 되는 취미들을 하자!

,