문제 해석
- 첫째 줄에 수의 개수(N)을 입력 받고, 그 N의 개수만큼 숫자를 입력받고, 그 숫자들이 중복이든, 중복이 아니든 작은수 -> 큰수로 정렬하면 되는 문제이다.
- 단 N은 10,000작거나 같다. => 최대 10,000개 까지 들어간다는 소리
코드1
import java.io.*;
import java.util.Arrays;
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 N = Integer.parseInt(br.readLine());
int[]arrays = new int[N];
for(int i = 0; i < N; i++) {
arrays[i] = Integer.parseInt(br.readLine());
}
br.close();
Arrays.sort(arrays);
for(int i = 0; i < N; i++) {
bw.write(arrays[i] + "\n");
}
bw.flush();
bw.close();
}
}
- 크게 어려운 부분이 없다. (그래서 따로 코드 설명X => 간단히 주석으로 작성해 두었다.)
결과1
코드2
import java.io.*;
import java.util.Arrays;
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 N = Integer.parseInt(br.readLine());
int[]arrays = new int[10001];
for(int i = 0; i < N; i++){
arrays[Integer.parseInt(br.readLine())]++;
}
br.close();
for(int i = 0; i < 10001; i++){
while(arrays[i] > 0){
bw.write(i + "\n");
arrays[i]--;
}
}
bw.flush();
bw.close();
}
}
- 이 경우는 Arrays.sort()를 쓰지않고, 해당 값을 인덱스로 가지고 요소를 해당 숫자가 중복된 개수만큼 증가시킨다.
결과2
- 배열을 정렬하지 않아서 시간이 거의 반이 줄어든 것을 볼 수 있다.
느낀점
- 시간이 많이 소요되서 맞은 코드 분들의 코드를 참고를 했는데, 무조건 작은수 -> 큰수로 출력하려면 정렬을 해야한다는 고정관념을 깰 수 있었던 문제였던 것 같다.