잡동사니/[2022] 회로이론

[백준/C] 10773번 제로

heylo 2022. 12. 11. 02:23

https://www.acmicpc.net/problem/10773

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAX_STACK_SIZE 100001

typedef struct element {
    int key;
}element;

int top = -1;
element stack[MAX_STACK_SIZE];

int exist(element item) { // item이 stack에 존재하는지 확인하는 함수
    for (int i = 0; i <= top; i++) {
        if (stack[i].key == item.key) {
            return 1; // 이미 stack에 존재한다
        }
    }
    return 0;
}
int push(element item) {
        stack[++top] = item;
}
element pop(void) {
        return stack[top--];
}

// 스택 프린트 함수 
void printStack(void) {
    for (int i = 0; i <= top; i++) {
        printf("stack[%d] = %d\n", i, stack[i].key);
    }
}

void sumPrint(void) {
    int sum = 0;
    for (int i = 0; i <= top; i++) {
        sum += stack[i].key;
    }
    printf("%d", sum);
}

int main(void) {
    int k, n; // k: 정수 개수, n: 정수
    int i; // 반복
    element item; // push할 item


    scanf("%d", &k);
    for (i = 0; i < k; i++) {
        scanf("%d", &n);

        if (n == 0) pop();
        else {
            item.key = n;
             push(item);
        }
    }
    sumPrint();
       
    return 0;
}

 

 

아래 틀린 코드 (왜 틀렸는지 아직 모르겠다)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#define MAX_STACK_SIZE 100001

typedef struct element {
    int key;
}element;

int top = -1;
element stack[MAX_STACK_SIZE];

int exist(element item) { // item이 stack에 존재하는지 확인하는 함수
    for (int i = 0; i <= top; i++) {
        if (stack[i].key == item.key) {
            return 1; // 이미 stack에 존재한다
        }
    }
    return 0;
}
int push(element item) {
        stack[++top] = item;
}
element pop(void) {
        return stack[top--];
}

void topElement(void) {
    printf("%d", stack[top].key);
}

/* 
// 스택 프린트 함수 
void printStack(void) {
    for (int i = 0; i <= top; i++) {
        printf("stack[%d] = %d\n", i, stack[i].key);
    }
}
*/

void sumPrint(void) {
    int sum = 0;
    while (top != -1) {
        sum += pop().key;
    }
    printf("%d", sum);
}

int main() {
    int k, n; // k: 정수 개수, n: 정수
    int i; // 반복
    element item; // push할 item


    scanf("%d", &k);
    for (i = 0; i < k; i++) {
        scanf("%d", &n);

        if (n == 0) pop();

        else {
            item.key = n;
            if (!exist(item))
                push(item);
        }
    }

    sumPrint(); // 합계 출력
       
    return 0;
}