less than 1 minute read

❓문제

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

✏️입력

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

📜출력

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

💻코드

    /*
        [백준 10989] 수 정렬하기
        22-08-27 / c++
    */

    #include<iostream>
    #include<algorithm>

    using namespace std;

    int main(void) {
        //속도를 위해 명시해줌
        ios::sync_with_stdio(false);
        cin.tie(NULL);
        cout.tie(NULL);

        int TESTCASE;
        cin >> TESTCASE;

        int arr[10001] = { 0 };

        for (int i = 0; i < TESTCASE; i++) {
            int num;
            cin >> num;
            arr[num]++;
        }

        for (int j = 0; j < 10001; j++) {
            for (int k = 0; k < arr[j]; k++) {
                cout << j << "\n";
            }
        }

        return 0;
    }
  • 처음에는 testcase크기로 배열을 만들어 값을 입력받고 sort()함수를 사용해주었다.
    결과는 메모리 초과
    최대 개수로 int를 저장하면 메모리가 남아나지 않는 것 같다.

  • 두번째로 10001 크기의 배열을 만들어 입력받는 수를 인덱스로 갖고, 그 수를 카운트 해주는 방법으로 했다.
  • 그리고 속도를 더 높이기 위해 ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 를 명시했다.