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 |