코딩테스트연습/백준

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

:)jun 2021. 12. 14. 17:43

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

 

10989번: 수 정렬하기 3

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

www.acmicpc.net

// 프로덕션코드

public class Yun_10989 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numberOfElements = scanner.nextInt();

        int[] array = new int[numberOfElements];

        for (int i = 0; i < numberOfElements; i++) {
            array[i] = scanner.nextInt();
        }

        int[] countingNumberOfElements = new int[100000001];

        for (int i = 0; i < array.length; i++) {
            countingNumberOfElements[array[i]]++;
        }

        for (int i = 0; i < countingNumberOfElements.length; i++) {
            for(int j=0; j<countingNumberOfElements[i]; j++){
                System.out.println(i);
            }
        }
    }
}

// 시간초과! 출력을 하나씩 해주려면 끝까지 가줘야하네... 아? 천만까지가 범위인데 억단위까지 갔구나! 수정하고 다시 출력해보자!
// 그래도 시간초과! 아... 하나하나의 숫자는 만보다 작거나 같은 수네.. 그럼 10001까지만 만들어주면 되네요.. 수정!
// 또 시간초과!... 어디서 더 줄일 수 있을까?  

// 프로덕션코드

import java.util.Scanner;

public class Yun_10989 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numberOfElements = scanner.nextInt();

        int[] countingNumberOfElements = new int[10001];

        for (int i = 0; i < numberOfElements; i++) {
            countingNumberOfElements[scanner.nextInt()]++;
        }

        for (int i = 0; i < countingNumberOfElements.length; i++) {
            for(int j=0; j<countingNumberOfElements[i]; j++){
                System.out.println(i);
            }
        }
    }
}

// 입력받는 동시에 값을 넣었는데도 시간초과! 원래 카운팅 정렬이 자연수 정렬할때는 엄청 빠른걸로 알고 있는데
// 내 코드는 왜 이렇게 느릴까...? ㅠㅠ 시간이 더 줄어들 수가 없는데... 일단 보류!