Programming/C

[백준] 10773: 제로

gayeon_ 2024. 1. 16. 23:56

 

스택 문제이다.

처음에 K를 입력받아 K만큼 숫자를 입력한다.

이때 0을 입력하면 최근에 입력한 수를 스택에 pop하고 아니라면 push한다.

 

 

입출력 예제다.

 

 

 

// 스택 문제
#include<stdio.h>
#define MAX 100000

// 스택 생성
int stack[MAX];

// top으로 스택에 저장된 원소 접근
int top = -1;

// 스택 삽입 연산
void push(int data){
    // 스택이 가득찰 경우 리턴
    if (top >= MAX -1)
        return;
    stack[++top] = data;
}

// 스택 삭제 연산
void pop(){
    // 스택이 비었다면 리턴
    if (top < 0)
        return;
    stack[top--] = 0;

}

int main() {
    int K = 0;
    int data = 0;
    int sum = 0;
    scanf("%d", &K);

    // K만큼 반복
    for(int i = 0; i < K; i++) {
        scanf("%d", &data);
        if(data == 0) {
            pop();
        } else {
            push(data);
        }
    }
    
    for(int i = 0; i <= top; i++) {
        sum = sum + stack[i];
    }
    printf("%d", sum);
    return 0;
}

 

push와 pop 함수를 만들어 작성했다.

 

스택에 저장된 원소는 top으로 정한 곳에서만 접근 가능하다.

 

top의 위치에서만 원소를 삽입하므로 먼저 삽입한 원소는 밑에 쌓이고

나중에 삽입한 원소는 위에 쌓인다.

 

따라서 스택은 후입선출 구조(LIFO, Last-In-First-Out)이다.

 

 

push(), pop() 연산 시 증가/감소 연산자 위치가 다른 이유

++, --는 위치에 따라서 동작이 달라진다.

++이 변수 앞에 있는 경우(++top) 변수의 값을 1 증가시킨 후에 값을 사용하고

++이 변수 뒤에 있는 경우(top++) 변수의 값을 먼저 사용한 후 1을 증가시킨다.

top의 위치는 push() 연산 시 비어있는 다음 위치로 이동 후 데이터가 삽입되어야 하므로 ++top,

pop() 연산 시에는 현재 위치의 요소를 0으로 변경 후 이동해야 하므로 top--을 사용한다.