https://www.acmicpc.net/problem/2751
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
문제
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
👉 풀이과정
지금까지 코테 문제를 풀면서 Scanner만 사용하고 BufferedReader는 사용하지 않았다.
이번에 처음 사용해 봤는데 확실히 시간차이가 크다.
Scanner대신 BufferedReader를 사용해서 객체 생성하고
StringBuilder도 같이 생성한다.
int 변수를 선언하고 scan.nextInt()로 받았던 변수를
Integer.parseInt(br.readLine())으로 입력받는다.
숫자들 역시 br.readLine()으로 입력받는다.
배열을 정렬하고, 바로 System.out.println(arr[i]); 이렇게 출력할 수 있지만
이러면 시간초과가 생긴다.
그래서 처음에 StringBuilder를 생성한 것!!
for문을 만들고 생성한 sb객체로 배열을 넣어준다.
append()를 사용해서 배열 값을 하나씩 넣어주고
출력은 줄 바꿈이 되어야 하니 append를 추가해서 "\n"을 넣어준다.
그리고 출력문으로 sb를 출력하면 시간초과 없이 잘 돌아간다!!
📌 제출코드
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
for(int i=0;i<n;i++){
arr[i]=Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
for(int i=0;i<n;i++){
sb.append(arr[i]).append("\n");
}
System.out.println(sb);
}
}
배우는 건 즐거워~~!
'코딩테스트 > JAVA' 카테고리의 다른 글
| [JAVA/프로그래머스] n 번째 원소부터 (0) | 2023.11.10 |
|---|---|
| [JAVA/백준 1934번] 최소공배수 (1) | 2023.11.09 |
| [JAVA/백준 10988번] 팰린드롬인지 확인하기 (0) | 2023.11.06 |
| [JAVA/백준 1037번] 약수 (0) | 2023.11.05 |
| [JAVA/백준 3046번] R2 (0) | 2023.11.04 |