본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Sorting- Counting Sort 2

https://www.hackerrank.com/challenges/countingsort2/problem

 

Counting Sort 2 | HackerRank

Simple version of counting sort.

www.hackerrank.com

 

<문제>

 

지난번에 풀이한 Counting Sort1과 유사하지만, 출력방식이 다르다. Counting Sort2 문제는 입력받은 배열을 원소의 크기 순서대로 출력한다. 

 

 

<코드>

#include <stdio.h>
#include <stdlib.h>

void count (int* arr1, int *arr2, int size) {
    for(int i = 0; i < size; i++) {
        arr2[(arr1[i])]++;
    }
}

int main() {
    int n;
    scanf("%d", &n);
    int *arr1 = malloc(sizeof(int)*n);

    for (int i = 0; i < n; i++) {
        scanf("%d", arr1+i);
    }
    int arr2 [100];
    for (int j = 0; j < 100; j++) {
        arr2[j] = 0;
    }
    count(arr1, arr2, n);
    for(int k = 0; k < 100; k++) {
        int c = arr2[k];
        while(c > 0) {
            printf("%d ", k);
            c--;
        }
    }
    return 0;
}

 

<코드 풀이>

입력받은 size만큼 arr1 배열을 동적할당하고, arr2 배열은 0으로 초기화시켰다.

이번에는 count() 함수를 생성하여 arr2배열에 원소의 크기별 총 개수를 저장하게 하였다.

그 뒤 for문을 통해 arr2 배열에 있는 개수만큼 k를 출력하게 하여 문제를 풀 수 있었다.

 

 

<결과>

'c언어 스터디 > HackerRank' 카테고리의 다른 글

[HackerRank] Tree- Height of a Binary Tree  (0) 2021.05.28
[HackerRank] Grading Students  (0) 2021.05.22
[HackerRank] Sorting- Counting Sort 1  (0) 2021.05.13
[HackerRank] Staircase  (0) 2021.05.13
[HackerRank] Birthday Cake Candles  (0) 2021.05.07