DINGA DINGA
Published 2021. 3. 4. 18:12
[백준] 10773번: 제로 카테고리 없음
728x90

www.acmicpc.net/problem/10773

 

10773번: 제로

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

www.acmicpc.net

 

코드

#include <stdio.h>

main() {
	int k, tmp, i = 0, sum = 0;	//i: 가장 최근 숫자의 인덱스, sum: 합계
	scanf("%d", &k);
	int* arr = (int*)malloc(sizeof(int) * (k + 1));
	while(k--) {
		scanf("%d", &tmp);
		if (tmp == 0)
			arr[i--];
		else
			arr[i++] = tmp;
	}
	for (int j = 0; j < i; j++)
		sum += arr[j];
	printf("%d", sum);
	free(arr);
}

 

설명

 

0을 입력 받았을 때 지워야 하는 숫자가 배열의 가장 직전 인덱스(0일 수도 있음)가 아닌 가장 최근 숫자여야 하는 것을 고려해 동적할당으로 arr를 선언했다.

k개의 숫자를 입력 받는데, 먼저 tmp 변수에 저장한다.

만약 입력 받은 숫자가 0이면 arr의 가장 최근 숫자를 지운다. 자연스럽게 배열 크기도 조정된다.

입력 받은 숫자가 0이 아니라면 tmp를 다음 인덱스에 저장헌다.

이렇게 k개의 숫자를 모두 처리하면, for문으로 arr에 있는 모든 숫자를 더해 sum에 저장하고 출력한다.

728x90