입력으로 들어오는 수의 인덱스가 얼마나 들어오는지 세면된다.
리턴하는 배열 크기가 100이라는 걸 주의해야한다.
int* countingSort(int arr_count, int* arr, int* result_count) {
int *rArr, i;
rArr = (int*)malloc(sizeof(int)*100);
for(i=0; i<100; i++) rArr[i] = 0;
for(i=0; i<arr_count; i++) rArr[arr[i]]++;
return rArr;
}
int* countingSort(int arr_count, int* arr, int* result_count) {
int *rArr, i;
rArr = (int*)malloc(sizeof(int)*100);
*result_count = 100;
for(i=0; i<100; i++) rArr[i] = 0;
for(i=0; i<arr_count; i++) rArr[arr[i]]++;
return rArr;
}
*result_count값을 정해주지 않아서 결과가 안나온거였다.
알고리즘은 틀린 것 같지 않은데 결과가 아무것도 안나와서 템플릿을 지우고 풀었다.
#include <stdio.h>
#include <stdlib.h>
int main(){
int arr[100] = {0};
int n, i;
int *cnt;
scanf("%d", &n);
cnt = (int*)malloc(sizeof(int)*n);
for(i=0; i<n; i++) scanf("%d", &cnt[i]);
for(i=0; i<n; i++) arr[cnt[i]]++;
for(i=0; i<100; i++) printf("%d ", arr[i]);
return 0;
}
배열 크기가 100으로 고정이므로 0으로 초기화 된 arr을 하나 만들어줬고, 입력 받을 배열 cnt도 동적 할당으로 만들어줬다. for문으로 입력값을 받고, 입력값에 해당하는 인덱스로 +1씩 해주면 된다. 이거는 지금보니 for문을 합쳐도 될 것 같다. 그리고 arr을 출력해줬다.
#include <stdio.h>
#include <stdlib.h>
int main(){
int arr[100] = {0};
int n, i;
int *cnt;
scanf("%d", &n);
cnt = (int*)malloc(sizeof(int)*n);
for(i=0; i<n; i++){
scanf("%d", &cnt[i]);
arr[cnt[i]]++;
}
for(i=0; i<100; i++) printf("%d ", arr[i]);
return 0;
}
이 코드도 통과했다.
뭘 틀렸는지 모르겠어서 그냥 c++로 풀었다.
vector<int> countingSort(vector<int> arr) {
vector<int> array(100);
for(int i=0; i<arr.size(); i++) array[arr[i]]++;
return array;
}
'HackerRank > Algorithms' 카테고리의 다른 글
[HackerRank C] Strings : CamelCase (0) | 2021.07.11 |
---|---|
[HackerRank C] Implementation : Grading Students (0) | 2021.07.11 |
[HackerRank C] Sorting : Quicksort 1 - Partition (0) | 2021.05.16 |
[HackerRank] Sorting : Find the Median (0) | 2021.05.09 |
[HackerRank] Sorting : Insertion Sort - Part 2 (0) | 2021.04.02 |