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 |