SWEA/[D3]

[D3] SWEA8931 제로

ruming 2020. 11. 6. 18:42

동아리의 지출 금액을 세기 위해 재현이가 부르는 액수를 받아 적는 상황

재현이는 잘못된 수를 부를 때마다 0을 외치면 재민이는 가장 최근에 받아 적은 수를 지운다.

재민이가 받아 적은 수의 합은?

 

K는 재현이가 부르는 숫자의 개수다. (1<=K1<=100,000)

T는 테스트 케이스 개수

※ 0을 부르는 것은 지울 숫자가 있을 때만 가능하다.

#include <stdio.h>
#include <stdlib.h>
int main(void){
	int T, tc, k, i, j, temp, sum;
	int *rc;
	scanf("%d", &T);
	for(tc=1; tc<=T; tc++){
		scanf("%d", &k);
		rc = (int*)malloc(sizeof(int)*k);
		for(i=0; i<k; i++)	rc[i] = 0;
		for(i=0, j=0; i<k; i++, j++){
			scanf("%d", &temp);
			if(temp == 0){
				j--;
				rc[j] = 0;
				j--; 
			}else{
				rc[j] = temp;
			}
		}	
		sum = 0;
		for(i=0; i<k; i++)	sum += rc[i];
		printf("#%d %d\n", tc, sum);
	}
	return 0;
}

재현이가 부르는 수를 저장할 포인터 변수 rc를 정의하고, k만큼의 메모리를 할당한다. {저장할 수 있는 최대치)

반복문을 써서 k개만큼 정수를 입력 받는다. i는 반복에, j는 배열 인덱스에 사용될 변수다. 변수 temp로 정수를 받고, temp가 0이 아니면 rc에 그대로 저장, 0이면 그 전 배열을 지워야 하기 때문에 j에서 1을 빼준다. 그리고 반복문에서 j++가 되고 있으므로 지운 배열부터 숫자를 저장하기 위해 한번 더 -1을 해준다. 마지막에 sum에 rc에 들어간 정수의 합을 저장해 출력한다.

 

 

 

'SWEA > [D3]' 카테고리의 다른 글

[D3] SWEA9317 석찬이의 받아쓰기  (0) 2020.11.06
[D3] SWEA 10505 소득불균형  (0) 2020.11.06
[D3] SWEA 10726 이진수표현  (0) 2020.11.02
[D3] SWEA10059 유효기간  (0) 2020.09.26
[C언어] SWEA 10505 - 소득 불균형  (0) 2020.09.20