백준 문제

백준 10989 (수 정렬하기 3) c++

kangyuseok 2022. 7. 12. 14:05
728x90

문제

 

10989번: 수 정렬하기 3

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

www.acmicpc.net

단순히 수를 오름차순으로 정렬하는 문제입니다.

하지만 틀렸습니다...

 

문제의 제한사항을 보면 메모리 제한이 8 MB 입니다.

또한 숫자가 들어올 수 있는 개수는 10000000개 입니다.

따라서 int 형으로 수를 받게 되면 

최악의 경우 4 byte * 10^7 = 40MB 의 크기가 됩니다.

 

수의 개수는 100000000이지만 수의 범위는 10000까지 입니다. 

따라서 수의 범위의 해당하는 배열의 크기를 잡고 입력되는 수의 index에 다가 세어줍니다.

 

이제 차례대로 출력해주면 됩니다.


전체코드입니다.

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
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <cmath>
#include <map>
#include <set>
#include <tuple>
#define MAX 2100000000
using namespace std;
using ll = long long;
using ull = unsigned long long;
int arr[10001];
int main() {
    ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
    int n;
    cin >> n;
    
    for (int i = 0; i < n; i++) {
        int a;
        cin >> a;
        arr[a]++;
    }
    for (int i = 1; i <= 10000; i++) {
        if (arr[i] == 0)
            continue;
        for (int j = 0; j < arr[i]; j++)
            cout << i << '\n';
    }
    
    return 0;
}
 
cs