백준 10989 수 정렬하기 3 [JAVA]

Ga0·2023년 4월 24일
0

baekjoon

목록 보기
36/125

문제 해석

  • 첫째 줄에 수의 개수(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"); //정렬된 배열을 순서대로 꺼내 buffer에 씀
        }

        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]; //N이 10,000보다 작거나 같다고 했으므로 인덱스가 0부터이므로 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){ //0보다 크면 ++한것이므로 입력받은 숫자에 속한다는 뜻
                bw.write(i + "\n"); //arrays[i] 값은 i의 값이 몇번있냐를 의미하는 것이고, 실질적으로 입력받은 값은 i이다.
                arrays[i]--; //한번 꺼냈으니 --해준다.
            }
        }

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

    }
}
  • 이 경우는 Arrays.sort()를 쓰지않고, 해당 값을 인덱스로 가지고 요소를 해당 숫자가 중복된 개수만큼 증가시킨다.

결과2

  • 배열을 정렬하지 않아서 시간이 거의 반이 줄어든 것을 볼 수 있다.

느낀점

  • 시간이 많이 소요되서 맞은 코드 분들의 코드를 참고를 했는데, 무조건 작은수 -> 큰수로 출력하려면 정렬을 해야한다는 고정관념을 깰 수 있었던 문제였던 것 같다.

0개의 댓글