HackerRank/Algorithms

[HackerRank C] Sorting : Counting Sort 1

ruming 2021. 5. 23. 08:25

입력으로 들어오는 수의 인덱스가 얼마나 들어오는지 세면된다.

리턴하는 배열 크기가 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;
}