티스토리 뷰
>문제
> 핵심
..배열 인덱스?
스택
>풀이과정
실버 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;
}
'알고리즘 > 기타' 카테고리의 다른 글
[C] 백준 | 10828번 코드 - 스택 (0) | 2021.03.01 |
---|---|
[C] 백준 | 10816번 코드 - 숫자 카드 2 (0) | 2021.03.01 |
[C] 백준 | 9012번 코드 - 괄호 (0) | 2021.02.28 |
[C] 백준 | 4949번 코드 - 균형잡힌 세상 (0) | 2021.02.27 |
[C] 백준 | 2164번 코드 - 카드2 (0) | 2021.02.27 |
댓글