문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다.
이 수는 10,000보다 작거나 같은 자연수이다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력 1
10
5
2
3
1
4
2
3
5
1
7
예제 출력 1
1
1
2
2
3
3
4
5
5
7
#include <iostream>
using namespace std;
const int N = 1e4 + 1;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
int arr[N];
fill_n(arr, N, 0);
for(int i=0; i<n; i++) {
int num;
cin >> num;
arr[num]++;
}
for(int i=0; i<N; i++) {
for(int j=0; j<arr[i]; j++) {
cout << i << '\n';
}
}
return 0;
}
개수의 최대수가 천만이기 때문에 값이 너무 크므로 이것을 배열의 인덱스로 잡으면 안된다.
입력받는수의 최댓값은 10000이기 때문에 이것을 인덱스로 잡아야한다.
일단 입력받는 수를 인덱스라 생각하고 그 인덱스에 해당하는 값을 하나 더해준다.
예를들어 arr배열이 0으로 초기화된 상태에서 1,3,7을 입력받았다면, arr[1], arr[3], arr[7]에 각각 1씩 더해주는것이다.
결국 이과정이 나타내는 것은 입력받은 수가 각각 몇개있는지 세주는것이다.
따라서 배열의 인덱스의 최댓값이 10000이므로, 10000까지 반복문을 돌면서 그 인덱스에 해당하는 값만큼
인덱스를 출력해주면 된다.
'PS > 백준' 카테고리의 다른 글
백준 / 정렬 / 11651번 / 좌표 정렬하기 2 / C++ (0) | 2022.01.22 |
---|---|
백준 / 정렬 / 2108번 / 통계학 / C++ (0) | 2022.01.22 |
백준 / 정렬 / 2750번 / 수 정렬하기 / C++ (0) | 2022.01.20 |
백준 / 브루트포스 / 1436번 / 영화감독 숌 / C++ (0) | 2022.01.19 |