본문 바로가기

알고리즘 문제풀이

압축[백준 1662]

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

스택을 사용하는데 압축 되기 전의 자리수가 몇 인지만 알면 되니 여는 괄호와 닫는괄호에 유의해서 

스택을 구성하면 된다. 

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

#define MAX_STACK_SIZE 1000

typedef struct {
    int cnt;
    int multiplier;
} StackNode;

void push(StackNode stack[], int *top, int cnt, int multiplier) {
    if (*top < MAX_STACK_SIZE - 1) {
        stack[++(*top)].cnt = cnt;
        stack[*top].multiplier = multiplier;
    }
}

StackNode pop(StackNode stack[], int *top) {
    if (*top >= 0) {
        return stack[(*top)--];
    }
    StackNode empty = {0, 0};
    return empty;
}

int main() {
    char input_data[1001];
    fgets(input_data, sizeof(input_data), stdin);
    
    // Remove the newline character at the end
    input_data[strcspn(input_data, "\n")] = 0;

    StackNode stack[MAX_STACK_SIZE];
    int top = -1;
    int cnt = 0;
    int before = 0;

    for (int i = 0; i < strlen(input_data); i++) {
        char c = input_data[i];
        if (c == '(') {
            push(stack, &top, cnt - 1, before);
            cnt = 0;
        } else if (c == ')') {
            StackNode info = pop(stack, &top);
            cnt = cnt * info.multiplier + info.cnt;
        } else {
            cnt += 1;
            before = c - '0';
        }
    }

    printf("%d\n", cnt);
    return 0;
}

'알고리즘 문제풀이' 카테고리의 다른 글

좋은 구간[백준 1059]  (0) 2024.07.02
반지[백준 5555]  (0) 2024.06.29
좋은 단어[백준 3986]  (0) 2024.06.24
탑[백준 2493]  (0) 2024.06.24
소수&팰린드롬[백준 1747]  (0) 2024.05.30