코딩/백준 문제 (실버)

[백준/10773/C언어] 제로 _ 풀이

룻밤 2023. 9. 21. 23:41

https://www.acmicpc.net/problem/10773

 

10773번: 제로

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경

www.acmicpc.net


풀이

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

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

	int sum = 0;
	int c = 0;
	for (int i = 0; i < k; i++) {
		scanf("%d", &n);	// n 입력
		if (n != 0) {		//n이 0이 아닐때
			arr[c] = n;		//arr[c]는 n
			sum += arr[c];	//sum+=arr[c]
		}
		else {				// n이 0일때
			sum -= arr[--c];	//sum -= arr[c-1]
			c--;				// 총 c-2
		}
		c++;				// c+1
	}
	printf("%d\n", sum);
	free(arr);
	return 0;
}

1 3 5 4 O 일때  O에 0을 입력하면

1 3 5 이 되어야 하므로

arr인덱스인 c에서 -2 해야 한다.

그렇게 해야 1 3 5 O 의 과정이 만들어진다.