본문 바로가기

c언어 스터디/HackerRank

[HackerRank] Equal Stacks

Equal Stacks | HackerRank

 

Equal Stacks | HackerRank

Equalize the piles!

www.hackerrank.com

<문제>

 

배열을 3개 입력받아서 모두 stack으로 쌓았을 때, 높이가 동일해질 때의 stack 높이를 리턴하는 문제이다.

 

<코드>

int equalStacks(int h1_count, int* h1, int h2_count, int* h2, int h3_count, int* h3) {
    int h1_sum[h1_count], h2_sum[h2_count], h3_sum[h3_count];
    int *a1, *a2, *a3, a1_size, a2_size, a3_size;
    int j1 = 0, j2 = 0;
    h1_sum[h1_count-1] = h1[h1_count-1];
    h2_sum[h2_count-1] = h2[h2_count-1];
    h3_sum[h3_count-1] = h3[h3_count-1];
    for (int i = 1; i < h1_count; i++)
        h1_sum[h1_count- 1 - i] = h1_sum[h1_count-i] + h1[h1_count - i - 1];
    for (int i = 1; i < h2_count; i++)
        h2_sum[h2_count- 1 - i] = h2_sum[h2_count-i] + h2[h2_count - i - 1];
    for (int i = 1; i < h3_count; i++)
        h3_sum[h3_count- 1 - i] = h3_sum[h3_count-i] + h3[h3_count - i - 1];

    if (h1_count < h2_count)
    {
        a1 = h1_sum;
        a1_size = h1_count;
        a2 = h2_sum;
        a2_size = h2_count;
    } else {
        a1 = h2_sum;
        a1_size = h2_count;
        a2 = h1_sum;
        a2_size = h1_count;
    }
    if (h3_count < a1_size)
    {
        a3 = a1;
        a3_size = a1_size;
        a1 = h3_sum;
        a1_size = h3_count;
    } else {
        a3 = h3_sum;
        a3_size = h3_count;
    }
    for (int i = 0; i < a1_size; i++)
    {
        j1 = 0;
        while ((a2[j1] != a1[i]) && (j1 < a2_size))
            j1++;
        if (a2[j1] == a1[i])
        {        
            j2 = 0;
            while ((a3[j2] != a1[i]) && (j2 < a3_size))
                j2++;
            if (a1[i] == a3[j2])
                return a1[i];
        }
    }
    return 0;
}

<풀이>

매개변수로 넘겨받은 배열 h1, h2, h3에 대해 각 배열의 합을 구하고 h1_sum, h2_sum, h3_sum에 저장한다.

그런다음 count를 각자 비교해서 작은 순서대로 a1, a2, a3에 각 배열의 합 h*_sum과 크기 정보 h*_count를 저장해두었다. 마지막으로 for문을 돌면서 a1[i]과 a2[j1], a3[j2]를 비교하면서 같아지면 a1[i]의 값, 즉 h1_sum[i]의 값을 리턴하여 문제를 풀 수 있었다.

 

<실행결과>

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

[HackerRank] Digit Frequency  (0) 2021.11.21
[HackerRank] Tree: Lowest Common Ancestor  (0) 2021.11.21
[HackerRank] Printing Tokens  (0) 2021.11.07
[HackerRank] Tree: Inorder Traversal  (0) 2021.10.10
[hackerrank] Students Marks Sum  (0) 2021.10.10