저번에 큐를 이용한 문제와, 큐를 이용한 계수정렬 문제를 해결한 적이 있었죠.
이번엔 스택을 이용하여 문제를 풀어보겠습니다.
스택은 전반적으로 큐와 비슷합니다.
다른 점은, 큐는 먼저 들어온 데이터가 먼저 나가는 형태이고
스택은 나중에 들어온 데이터가 먼저 나가는 형태입니다.
그렇다면, 기본적인 스택을 구현하는 것은 큐와 별반 다를 것이 없습니다.
큐가 먼저 들어온게 먼저 나갔다면, 스택은 나중에 들어온게 먼저 나가게 처리해주면 됩니다.
이 문제에서는
0이 입력되면 숫자를 빼고, 다른 숫자가 입력되면 숫자를 넣어야 하므로
조건만 맞추어서 코드를 짜주시면 됩니다.
전체 코드)
#include <stdio.h>
#define N 100000
int stack[N];
int front = 0, rear = 0; //스택에 있는 데이터의 시작과 끝
int push(int k); //스택에 데이터를 삽입하는 함수
int pop(); //스택에 있는 데이터를 빼는 함수
void print_stack(); //스택에 있는 데이터의 합을 출력하는 함수
int main(void)
{
int n;
scanf("%d", &n);
int num;
for (int i = 0; i < n; i++)
{
scanf("%d", &num);
if (num == 0) //0이 입력되면 숫자를 뺸다
{
pop();
}
else //0이 아닌 다른 수가 입력되면 그 숫자 스택에 삽입
{
push(num);
}
}
print_stack();
return 0;
}
int push(int k)
{
stack[rear] = k; //스택에 입력된 숫자 삽입하고 rear 1 증가.
rear++;
return 1;
}
int pop()
{
int k;
k = stack[rear - 1]; //rear 한칸 앞으로 당기기
rear--; //(rear가 마지막 데이터가 있는 곳을 의미하므로
//한 칸 당기면 마지막에 들어온 수 삭제의 의미)
return k;
}
void print_stack()
{
int sum = 0;
for (int i = front; i < rear; i++)
{
sum += stack[i];
}
printf("%d\n", sum);
}
만약 이해가 안되신다면 큐를 보고 오시는 것을 추천드립니다.
'백준 > c' 카테고리의 다른 글
백준_24511_queuestack (0) | 2024.05.08 |
---|---|
백준_12789_도키도키간식드리미 (0) | 2024.05.06 |
백준_1676_팩토리얼0의개수 (0) | 2024.05.04 |
백준_1436_영화감독숌 (0) | 2024.05.03 |
백준_10989_수정렬하기3(counting sort) (0) | 2024.05.03 |