C언어/문제풀다 하나씩
counting sort 문제 풀어보기
mcdn
2020. 6. 26. 14:43
반응형
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int arr[10];//n 1~10
for (int i = 0;i < n;i++) {
cin >> arr[i];
}
int dat[100] = { 0 };
for (int i = 0; i < n;i++) {
dat[arr[i]] += 1;
}
int sum = 0;
int summingup[100] = { 0 };
for (int i = 0; i < 21;i++) {
sum += dat[i];
summingup[i] = sum;
}
for (int i = 0; i < 10;i++) {
cout << summingup[i];
}
cout << endl;
int ans[11];
for (int i = 0; i < n;i++) {
int temp = summingup[arr[i]];
ans[temp - 1] = arr[i];
summingup[arr[i]]--;
}
for (int i = 0; i < n;i++) {
cout << ans[i];
}
}
O(n + k) 속도를 보이는 Counting Sort를 구현하고자 합니다.
n개의 숫자를 입력받고, 그 과정을 출력 해 주세요.
Counting Sort 과정 1 : DAT 처리
Counting Sort 과정 2 : 누적합 구하기 ( [0] ~ [9] index 까지 총 10개 누적값만 출력 해 주세요. )
Counting Sort 과정 3 : 정렬하기 ( 정렬 결과를 출력 해 주세요. )
정렬하는 과정에서 만들어지는 누적값과 정렬값을 출력 해 주세요.
[세부 조건]
1. 정렬할 숫자의 최소 값 : 1
2. 정렬할 숫자의 최대 값 : 20
3. 1 <= n <= 10
입력 예제
5 5 2 2 1 2
출력 결과
0144455555 12225
좀 복잡하지만 정리하면..
1 DAT
입력후 dat[100]에다가 집어넣는다.
2 summingup
누적합 배열에다가 dat 개수만큼 누적합 정리한다.
그리고 프린트 (이건 문제의 요구사항)
3 마지막으로 summingup한 누적합 결과에 따라
새로운 배열 ans에다가 정리한다.
누적합-1 로 하면 자동으로 인덱스가 부여됨
반응형