본문 바로가기
[백준]

[BaekJoon/백준] 1874번 스택 활용

by Hevton 2021. 3. 6.
반응형

문제 이해가 안되어서 다른 분의 글을 보고 문제를 이해했다.

organize-study.tistory.com/60

 

 

C언어로 문제 풀 때마다 느끼는건데, 문자열 활용에 대해서 다른 언어들보다 너무 기능이 후달린다..

C언어로 문제 풀 때 문자열 다루는 문제가 나올 때 마다 짜증난다.. 하.. 자바랑 씨쁠쁠 방법이 훨씬 쉽다.

 

이 문제.. 결과 다 구해놓고 문자열 출력에서 막혔다. C언어는 문자열을 위한 배열 크기가 정적이라 정말..짜증

정해진 크기도 없고.. 임의로 정해주었다.

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

int cur = 0; // 현재 값 상태

typedef struct {
    int *stk;
    int size;
} IntStack;

void push(IntStack *s, int a) {
    s->stk[s->size++] = a;
}

void pop(IntStack *s, int *a) {
    *a = s->stk[--s->size];
}

int top(IntStack *s) {
    return s->stk[s->size - 1];
}

int N;
int temp;

char result[100000*2]; // 결과를 담을 배열.. C언어는 참 문자열 다루는게 유동적이지 않아서 힘들다.
int r_p = 0; // result 이터레이터

int main() {
    IntStack stack;
    stack.size = 0;
    stack.stk = calloc(100000, sizeof(int));
    
    scanf("%d", &N);
    
    for(int i = 0; i < N; i++) {
        scanf("%d", &temp);
        
        while(top(&stack) != temp) {
            
            if(top(&stack) > temp) {
                printf("NO\n");
                return 0;
            } else {
                push(&stack, ++cur);
                result[r_p++] = '+';
            }
            
        }
        pop(&stack, &temp); // temp에 굳이 받을필욘 없다만..
        result[r_p++] = '-';
        
        
    }
    for(int i = 0; i < r_p; i++) {
        printf("%c\n", result[i]);
    }
    
}

 

반응형