본문 바로가기

백준/Java

[JAVA] 많은 수를 효율적으로 오름차순 정렬해 입출력하기.

백준 2751번 '수 정렬하기 2' 문제. (실버5)

https://www.acmicpc.net/problem/2751

 

조건

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

1차 접근 Collections.sort()를 활용한 정렬

import java.util.*;
public class Main {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        int numCount = sc.nextInt();
        ArrayList<Integer> num = new ArrayList<Integer>();
        for(int i = 0; i < numCount; i++){
            int number = sc.nextInt();
            num.add(number);
        }
        Collections.sort(num);
        for(int i : num){
            System.out.println(i);
        }
    }
}

 

시간초과가 발생했다. 알아보니 입출력의 방식이 비효율적이기 때문이었다.

이를 해결하기 위해 buffer를 사용하는 BufferedReader, BufferedWriter 클래스를 알게 되었다.

이 클래스를 활용한 입출력 방법과 자세한 설명은 포스트할 예정

 

최종 코드

import java.util.*;
import java.io.*;
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));

        int numCount = Integer.parseInt(br.readLine());

        ArrayList<Integer> numList = new ArrayList<Integer>();
        for(int i = 0; i < numCount; i++)
            numList.add(Integer.parseInt(br.readLine()));

        Collections.sort(numList);

        for(int i : numList)
            bw.write(i + "\n");

        bw.flush();
        bw.close();
    }
}

코드 설명