https://www.hackerrank.com/challenges/countingsort1/problem
Counting Sort 1 | HackerRank
Count the number of times each value appears.
www.hackerrank.com
Counting Sort는 다음과 같다.
arr = [1, 1, 3, 2, 1] 이라고 하였을때 i가 0부터 4까지 증가하는 동안 result의 인덱스 값은 arr[i]가 되고 그 인덱스의 요소를 1 증가시키면 된다.
arr[i]의 값은 0~99이므로 result의 최대 배열의 크기는 100이다.
문제푸는 공간에서 int *를 리턴해야 하므로 int *을 리턴하도록 만들어 주었다
countinSort의 매개변수는 각각 배열의 크기, 배열, 리턴할 배열의 크기를 나타내준다.
먼저 포인터 변수 result를 선언해 주었다. result는 100개의 배열이 되어야 하므로 malloc을 통해 공간을 할당해 주었다.
그리고 인덱스 요소의 값을 증가시키기 위해서는 처음에 배열의 모든 원소들이 0이 되어야 하므로 모든 원소들을 0으로 만들어 주었다.
arr_count전까지 i를 증가키면서 result배열에서 arr[i]의 값이 인덱스로 오고 그때의 요소를 1증가시켜주었다.
result_count 에는 100을 입력시켜 주었다. 원래 그냥 result 배열의 크기만 출력하면 되는줄 알고 result_count에 result의 크기를 넣어주었는데 문제를 다시 자세히 보니 무조건 100개의 원소들을 출력해야 했다. 따라서 result_count에 100을 입력시켰다.
그리고 result를 리턴했다.