경험의 기록

문제 : www.acmicpc.net/problem/10989

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

 

풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 10989 수 정렬하기 3
#include <bits/stdc++.h>
using namespace std;
 
int main() {
 
    int n;
    int num;
    int arr[10001= { 0 };
    cin >> n;
 
    for (int i = 0; i < n; i++) {
        scanf("%d"&num);
        arr[num]++;
    }
 
    for (int i = 0; i < 10001; i++) {
        if (arr[i] != 0) {
            while (arr[i] > 0) {
                printf("%d\n", i);
                arr[i]--;
            }
        }
    }
    return 0;
}
cs

 

수의 개수가 천만개 까지 이므로 일반적인 정렬을 사용하면 메모리 오류가 발생하게 된다. 그래서 수의 범위가 10000이하이므로 각각의 숫자가 얼만큼 나왔는지 카운팅하여 0부터 출력하는 방식을 사용하였다.

또한 cin과 cout은 속도가 느리므로 scanf와 printf를 사용하였다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading