백준/Java
[JAVA] 많은 수를 효율적으로 오름차순 정렬해 입출력하기.
0htmdwns
2025. 3. 5. 15:27
백준 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();
}
}
코드 설명