반응형
코드를 보기 전에: 이 문제는 Last in First out 스택 문제다.
보통의 사람들은 이 문제를 함수로 풀었지만, 나는 다르게 풀었다.
나는 배열 하나를 추가로 만들어서 풀었다.
예제 문제를 예시로 들자면, 1,3,5,4,0,0,7,0,0,6이란 숫자가 입력됐다.
반복문을 만들어서 입력받은 숫자가 0이 아니면 다른 배열에 추가시키도록 했다.
1 | 3 | 5 | 4 |
1
2
3
4
5
6
7
|
for (int a = 0; a < num; a++)
{
if (nums[a] != 0)
{
result[cnt] = nums[a];
cnt++;
}
|
cs |
그러다 숫자 0이 나오면, 다른 배열에 있는 가장 뒤에있는 숫자를 0으로 만들게했다.
1
2
3
4
5
|
else if (nums[a] == 0)
{
result[cnt - 1] = 0;
cnt--;
}
|
cs |
예제 문제에서는 4 뒤에 0이라는 숫자가 나오므로, 4라는 숫자가 없어지고 0이 된것이다.
그 후, 입력된 숫자가 0 이 아니면 숫자 0이 있는 자리에 넣게 할수있게, 위치를 1을 뺏다.
1 | 3 | 5 | 0 |
이렇게 만든 배열에 숫자가 전부 나열되면, 그 숫자들을 다 더한값이 정답이 된다.
full code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <stdio.h>
int nums[100001];
int result[100001];
int main()
{
int num, cnt = 0;
int sum = 0;
scanf("%d", &num);
for (int a = 0; a < num; a++)
{
scanf("%d", &nums[a]);
}
for (int a = 0; a < num; a++)
{
if (nums[a] != 0)
{
result[cnt] = nums[a];
cnt++;
}
else if (nums[a] == 0)
{
result[cnt - 1] = 0;
cnt--;
}
}
for (int a = 0; a <= cnt; a++)
{
sum += result[a];
}
printf("%d\n", sum);
return 0;
}
|
cs |
반응형