반응형
#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 로 하면 자동으로 인덱스가 부여됨
반응형
'C언어 > 문제풀다 하나씩' 카테고리의 다른 글
디폴트 생성자 Queue() : {} (0) | 2020.08.12 |
---|---|
boj 백준 9012 스택 괄호 VPS 문제 (0) | 2020.08.08 |
금지어 없애고 대체하기 find insert erase 함수 사용 (0) | 2020.06.26 |
phrasing 문자열 안에 특정 문자 찾기 (0) | 2020.06.26 |
기본 해쉬함수 사용하기 B-> 10 (0) | 2020.06.26 |
head[100]과 myalloc()해보기 (0) | 2020.06.26 |
이름을 해쉬함수 거쳐 바꿔보기 - honors method (0) | 2020.06.23 |
해쉬함수 쓰기! 나이 입력하고 이름 출력 (0) | 2020.06.23 |