티스토리 뷰

>문제

> 핵심

..배열 인덱스?

스택

>풀이과정

실버 4길래 그래도 뭔가 좀 있지 않을까 했는데 매우 쉽게 풀었다.

 

"정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다."

그러므로, "0"이 들어오면 앞에 무엇이든지 지울 숫자가 하나 이상은 있다는 이야기이다.

 

일단 e 에 정수를 입력받는다. idx = 0부터 출발

만약 e가 "0" 이라면, ar[--idx] = 0 으로 0 이전에 있던 값을 0으로 바꾼다.

만약 e가 "0" 이 아니라면, ar[idx++] = e 로 현재 위치한 인덱스에 값을 넣는다.

 

이렇게 반복문을 한번 돌고 난 이후에 다시 반복문을 돌면서 남아있는 값을 sum 하여 출력하면 끝.

 

 

문제를 풀고나서 다른사람이 쓴 코드를 보니까 원래는 스택으로 푸는 문제인 것 같았다.

0 이외의 값이 들어오면 push, 0을 입력하면 pop 하는 방식으로.

그렇게 push랑 pop 하면서 반복문 빠져나오고 마지막에 스택에 남아있는 값만 더해주면 되는거다.

 

이것도 크게 복잡한 로직은 아니다.

>깨달은점

스테이크보다 스택

>코드

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

int main()
{
	int K, i, idx = 0, sum = 0, e;
	int* ar;

	scanf("%d", &K);
	ar = (int*)calloc(K, sizeof(int));

	for (i = 0; i < K; i++)
	{
		scanf(" %d", &e);

		if (e == 0)
		{
			ar[--idx] = 0;
		}
		else
		{
			ar[idx++] = e;
		}
	}
	for (i = 0; i < K; i++)
	{
		sum += ar[i];
	}

	printf("%d\n", sum);

	return 0;
}

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함