백준/c

백준_10773_제로_(stack)

S0LL 2024. 5. 5. 02:08

 

 

저번에 큐를 이용한 문제와, 큐를 이용한 계수정렬 문제를 해결한 적이 있었죠.

https://sol248.tistory.com/17

 

백준_10845_큐(queue)

큐를 구현하는 문제입니다.   큐의 개념)큐는 먼저 넣은 데이터가 먼저 나오는 선입선출(FIFO)의 형태를 가지고 있습니다. 나중에 넣은 데이터가 먼저 나오는 스택과는 정반대의 성질을 지니고

sol248.tistory.com

https://sol248.tistory.com/18

 

백준_2751_수정렬하기2_(radixSort)

문제는 매우 단순합니다. N을 입력받아 N번 숫자를 입력받은 후 오름차순으로 정렬하는 문제입니다. 하지만 제한시간이 2초라는 점을 감안해야 할 것 같습니다. 시간이 짧으므로, 시간 복잡도

sol248.tistory.com

 

 

이번엔 스택을 이용하여 문제를 풀어보겠습니다.

 

스택은 전반적으로 큐와 비슷합니다.

 

다른 점은, 큐는 먼저 들어온 데이터가 먼저 나가는 형태이고

 

스택은 나중에 들어온 데이터가 먼저 나가는 형태입니다.

 

 

 

그렇다면, 기본적인 스택을 구현하는 것은 큐와 별반 다를 것이 없습니다.

 

큐가 먼저 들어온게 먼저 나갔다면, 스택은 나중에 들어온게 먼저 나가게 처리해주면 됩니다.

 

 

 

이 문제에서는

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