문제 |
10989번: 수 정렬하기 3 (acmicpc.net)
10989번: 수 정렬하기 3
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.
www.acmicpc.net
코드 (Counting Sort) |
#include <iostream>
#define MAX_NUM 10000
using namespace std;
int arr[MAX_NUM + 1];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
while (n--) {
int num;
cin >> num;
arr[num]++;
}
for (int i = 1; i <= MAX_NUM; i++) {
for (int j = 0; j < arr[i]; j++) {
cout << i << '\n';
}
}
return 0;
}
설명 |
10,000,000개의 int 데이터를 저장하려면 약 40MB가 필요한데,
메모리 제한이 8MB이므로 데이터 자체를 저장할 수는 없다.
반면 입력받은 수의 최댓값은 10,000에 불과하므로 입력받은 값에 해당하는 배열의 값을 저장하면 된다.
'PS > BOJ' 카테고리의 다른 글
[C++] BOJ (백준) 11650 : 좌표 정렬하기 (0) | 2023.03.05 |
---|---|
[C++] BOJ (백준) 11050 : 이항 계수 1 (0) | 2023.03.05 |
[C++] BOJ (백준) 10866 : 덱 (0) | 2023.03.05 |
[C++] BOJ (백준) 10845 : 큐 (0) | 2023.03.05 |
[C++] BOJ (백준) 10828 : 스택 (0) | 2023.03.05 |