본문 바로가기
공부 정리/백준

[백준] 자바 2751 수 정렬하기 2

by 경적필패. 2021. 2. 15.
반응형

문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.


입력

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.


테스트 케이스

초록색 입력/ 검은색 출력


접근

당연하게 arrays.sort(arr)를 이용하여 문제를 풀려하였지만, 시간 초과가 떴습니다.

함정이 있는 듯합니다.

구글링 해본 결과 arrays.sort()의 경우 퀵 소트를 사용하여 최악의 경우 O(N^2) 시간이 걸리게 된다고 합니다.

이를 해결하기 위해 Collections.sort()를 이용하면 문제가 해결되었습니다.

Collecions.sort()의 경우 합병 정렬과 삽입 정렬을 같이 사용하여 시간 복잡도를 O(N) ~ O(NlongN)으로 조정한다고 합니다.

앞으로도 유용하게 사용할 수 있을 듯합니다.


코드

import java.io.*;
import java.math.*;
import java.util.*;

public class Main {

	/*
 	2751 problem 수 정렬하기2
	*/

	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int num = Integer.parseInt(br.readLine());
		
		ArrayList<Integer> list = new ArrayList<Integer>();
		
		for(int i=0; i<num; i++) {
			list.add(Integer.parseInt(br.readLine()));
		}
		Collections.sort(list);
		for(int i=0; i<list.size();i++) {
			bw.write(list.get(i)+"\n");
		}
		bw.flush();
		bw.close();
	}
}

반응형

'공부 정리 > 백준' 카테고리의 다른 글

[백준] 자바 1105 팔  (0) 2021.02.16
[백준] 자바 1449 수리공 항승  (0) 2021.02.15
[백준] 자바 5585 거스름돈  (0) 2021.02.14
[백주] 자바 2217 로프  (0) 2021.02.14
[백준] 자바 1932 정수 삼각형  (0) 2021.02.11

댓글