Computer/Algorithm

Daily Algorithm - 0은 빼!

kentakang 2018. 3. 26. 18:46
반응형

문제

당신의 상관은 당신이 작년에 회사의 실적에 얼마나 도움이 되었는지 횟수를 세었다.

불행히도 당신의 상관은 때때로 횟수를 틀리게 읽는다.

다행히도 당신의 상관은 잘못된 숫자를 읽은 것을 인식하면 ‘zero’라고 말한다. 이는 ‘직전의 숫자는 무시한다’는 것을 의미한다. 

불행히고 당신의 상관은 실수를 반복할 수 있고, 매 실수 마다 ‘zero’라고 말한다. 

예를 들면 당신의 상관이 ‘One, three, five, four, zero, zero, seven, zero, zero, six’라고 말한 것은 7을 의미하는 것인데 다음의 표를 보면 알 수 있다.

상관의 명령현재 숫자설명
"one, three, five, four"1, 3, 5, 44개의 숫자를 기록
"zero, zero"1, 3마지막 두 숫자를 삭제
"seven"1, 3, 7이전의 숫자 끝에 7을 추가
"zero, zero"1마지막 두 숫자를 삭제
"six"1, 6마지막 남은 숫자들, 합은 7

어느 순간이나 당신의 상관은 ‘zero’라고 말할 수 있으며, 만약 모든 숫자들이 무시되면 그 합은 0이 된다. 

상관이 말하는 문구를 입력받아 정확한 합을 구하는 프로그램을 작성하시오.

입력

첫 번째 줄에는 0을 포함하는 정수 K를 입력받는다.

그 다음 K줄 동안 1부터 100까지의 정수 또는 0을 입력 받는다.

[입력값의 정의역]

1 <= k <= 100,000

출력

정확한 합을 출력한다.

예제 입력

10

1

3

5

4

0

0

7

0

0

6

예제 출력

7

풀이

#include <stdio.h>

int stack[100000];
int top = -1;

void push(int data)
{
stack[++top] = data;
}

int peek()
{
return stack[top--];
}

int main()
{
int k, n, sum = 0;
scanf("%d", &k);

for (int i = 0; i < k; i++)
{
scanf("%d", &n);

if (n == 0)
{
sum -= peek();
}
else
{
push(n);
sum += n;
}
}

printf("%d", sum);
}



문제 출처 : http://codeup.kr/JudgeOnline/problem.php?id=3117



반응형