본문 바로가기
[백준]

[BaekJoon/백준] 10773번 스택

by Hevton 2021. 3. 5.
반응형

 

가장 최근에 쓴 수를 지워야 하는 문제. 즉 스택이 필요한 문제였다.

 

일단 정석으로 스택을 구현해서 풀어봤다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    int *stk;
    int size; // 스택 포인터 = 스택에 쌓여있는 데이터의 개수
} IntStack;

int Push(IntStack *s, int x) {
    if(s->size >= 100000)
        return -1;
    
    s->stk[s->size++] = x;
    
    return 0; // 성공
}

int Pop(IntStack *s, int *x) {
    if(s->size <= 0) {
        *x = -1;
        return -1;
    }
    
    *x = s->stk[--s->size];
    
    return 0; // 성공
}

int Size(IntStack *s) {
    
    return s->size;
}

int IsEmpty(IntStack *s) {
    
    return (s->size <= 0);
}

int Peek(IntStack *s, int *x) {
    
    if(s->size <= 0) {
        *x = -1;
        return -1;
    }
    
    *x = s->stk[s->size - 1];
    
    return 0; // 성공
}

int Add_All(IntStack *s) {
    int result = 0;
    for(int i = 0; i < s->size; i++) {
        result += s->stk[i];
    }
    return result;
}

int N;
char input[6];
int key;

int main() {
    
    IntStack stack;
    stack.stk = calloc(100000, sizeof(int));
    stack.size = 0;
    
    scanf("%d", &N);
    
    
    while(N--) {
        scanf("%d", &key);
        
        if(key == 0)
            Pop(&stack, &key);
        else
            Push(&stack, key);
                
    }
    
    printf("%d", Add_All(&stack));
    
}

코드가 좀 길다.

 

그래서 이를 간략하게 구현해봤다.

#include <stdio.h>

int stack[100000];
int size;

void push(int a) {
    stack[size++] = a;
}

int pop() {
    return stack[--size];
}

int main() {
    int N;
    int input;
    int result = 0;
    
    scanf("%d", &N);
    
    for(int i = 0; i < N; i++) {
        scanf("%d", &input);
        
        if(input == 0)
            pop();
        else
            push(input);
    }
    
    for(int i = 0; i < size; i++) {
        result += stack[i];
    }
    
    printf("%d", result);
}
반응형

'[백준]' 카테고리의 다른 글

[BaekJoon/백준] 4949 스택 활용  (0) 2021.03.06
[BaekJoon/백준] 9012번 스택 활용  (2) 2021.03.05
[BaekJoon/백준] 10828 스택 구현  (0) 2021.03.05
[BaekJoon/백준] 2004번  (0) 2021.03.04
백준 게시판 개인공지  (0) 2021.03.03