#include <stdio.h>
void push(int* top, int c, int* stack){
if ((c>0) && (stack[*top] > 0)){
stack[*top] += c;
return;
}
(*top)++;
stack[*top] = c;
return;
}
void pop(int* top, int ptr, int* stack){
for (int i = ptr; i < *top; i++){
stack[i] = stack[i + 1];
}
stack[*top] = 0;
(*top)--;
return;
}
int main()
{
int i, j, num = 0, top = 0, pop_ptr = 0;
char queue[32] = { 0 };
int stack[32] = { 0 };
for (i = 1; i < 31; i++)
{
if (queue[i] == NULL){
break;
}
switch (queue[i]){
case '(': // ( 들어오면 -1로 push
push(&top, -1, stack);
break;
case '[': // [ 들어오면 -2로 push
push(&top, -2, stack);
break;
case ')':
for (j = top; j > 0; j--){ // -1 검색해서 pop할 위치 탐색
if (stack[j] == -1) {
pop_ptr = j;
break;
}
}
if (j == 0) { // pop할 것 못찾으면 fail
top = 0;
i = 31;
break;
}
if (pop_ptr == top){ // pop이 top에서 발생하면
pop(&top, pop_ptr, stack); // 원하는 위치 pop
num = 2;
if (stack[top] > 0){ // +연산 후 다시 push
num += stack[top];
stack[top--] = 0;
}
push(&top, num, stack);
}
else if (pop_ptr != top){ // pop이 중간에 숫자를 끼고 발생하면
pop(&top, pop_ptr, stack); // 원하는 위치 pop
num = 2;
if (stack[top] > 0){ // *연산 후 다시 push
num *= stack[top];
stack[top--] = 0;
}
else {
top = 0;
break;
}
push(&top, num, stack);
}
break;
case ']':
for (j = top; j > 0; j--){ // -2 검색해서 pop할 위치 탐색
if (stack[j] == -2) {
pop_ptr = j;
break;
}
if (j == 0) { // pop할 것 못찾으면 fail
top = 0;
i = 31;
break;
}
}
if (pop_ptr == top){ // pop이 top에서 발생하면
pop(&top, pop_ptr, stack); // 원하는 위치 pop
num = 3;
if (stack[top] > 0){ // +연산 후 다시 push
num += stack[top];
stack[top--] = 0;
}
push(&top, num, stack);
}
else if (pop_ptr != top){ // pop이 중간에 숫자를 끼고 발생하면
pop(&top, pop_ptr, stack); // 원하는 위치 pop
num = 3;
if (stack[top] > 0){ // *연산 후 다시 push
num *= stack[top];
stack[top--] = 0;
}
else {
top = 0;
break;
}
push(&top, num, stack);
}
break;
}
}
printf("%d\n", top
== 1 ? stack
[top
] : 0); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHB1c2goaW50KiB0b3AsIGludCBjLCBpbnQqIHN0YWNrKXsKCWlmICgoYz4wKSAmJiAoc3RhY2tbKnRvcF0gPiAwKSl7CgkJc3RhY2tbKnRvcF0gKz0gYzsKCQlyZXR1cm47Cgl9CgkoKnRvcCkrKzsKCXN0YWNrWyp0b3BdID0gYzsKCglyZXR1cm47Cn0KCnZvaWQgcG9wKGludCogdG9wLCBpbnQgcHRyLCBpbnQqIHN0YWNrKXsKCWZvciAoaW50IGkgPSBwdHI7IGkgPCAqdG9wOyBpKyspewoJCXN0YWNrW2ldID0gc3RhY2tbaSArIDFdOwoJfQoJc3RhY2tbKnRvcF0gPSAwOwoJKCp0b3ApLS07CglyZXR1cm47Cn0KCmludCBtYWluKCkKewoJaW50IGksIGosIG51bSA9IDAsIHRvcCA9IDAsIHBvcF9wdHIgPSAwOwoJY2hhciBxdWV1ZVszMl0gPSB7IDAgfTsKCWludCBzdGFja1szMl0gPSB7IDAgfTsKCglzY2FuZigiJXMiLCBxdWV1ZSArIDEpOwoJZm9yIChpID0gMTsgaSA8IDMxOyBpKyspCgl7CgkJaWYgKHF1ZXVlW2ldID09IE5VTEwpewoJCQlicmVhazsKCQl9CgkJc3dpdGNoIChxdWV1ZVtpXSl7CgkJY2FzZSAnKCc6CQkvLyAoIOuTpOyWtOyYpOuptCAtMeuhnCBwdXNoCgkJCXB1c2goJnRvcCwgLTEsIHN0YWNrKTsKCQkJYnJlYWs7CgkJY2FzZSAnWyc6CQkvLyBbIOuTpOyWtOyYpOuptCAtMuuhnCBwdXNoCgkJCXB1c2goJnRvcCwgLTIsIHN0YWNrKTsKCQkJYnJlYWs7CgkJY2FzZSAnKSc6CgkJCWZvciAoaiA9IHRvcDsgaiA+IDA7IGotLSl7CQkvLyAtMSDqsoDsg4ntlbTshJwgcG9w7ZWgIOychOy5mCDtg5Dsg4kKCQkJCWlmIChzdGFja1tqXSA9PSAtMSkgewoJCQkJCXBvcF9wdHIgPSBqOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmIChqID09IDApIHsJCS8vIHBvcO2VoCDqsoMg66q77LC+7Jy866m0IGZhaWwKCQkJCXRvcCA9IDA7CgkJCQlpID0gMzE7CgkJCQlicmVhazsKCQkJfQoJCQlpZiAocG9wX3B0ciA9PSB0b3ApewkJLy8gcG9w7J20IHRvcOyXkOyEnCDrsJzsg53tlZjrqbQKCQkJCXBvcCgmdG9wLCBwb3BfcHRyLCBzdGFjayk7CQkvLyDsm5DtlZjripQg7JyE7LmYIHBvcAoJCQkJbnVtID0gMjsKCQkJCWlmIChzdGFja1t0b3BdID4gMCl7CQkvLyAr7Jew7IKwIO2bhCDri6Tsi5wgcHVzaAoJCQkJCW51bSArPSBzdGFja1t0b3BdOwoJCQkJCXN0YWNrW3RvcC0tXSA9IDA7CgkJCQl9CgkJCQlwdXNoKCZ0b3AsIG51bSwgc3RhY2spOwoJCQl9CgkJCWVsc2UgaWYgKHBvcF9wdHIgIT0gdG9wKXsJCS8vIHBvcOydtCDspJHqsITsl5Ag7Iir7J6Q66W8IOuBvOqzoCDrsJzsg53tlZjrqbQKCQkJCXBvcCgmdG9wLCBwb3BfcHRyLCBzdGFjayk7CQkvLyDsm5DtlZjripQg7JyE7LmYIHBvcAoJCQkJbnVtID0gMjsKCQkJCWlmIChzdGFja1t0b3BdID4gMCl7CQkvLyAq7Jew7IKwIO2bhCDri6Tsi5wgcHVzaAoJCQkJCW51bSAqPSBzdGFja1t0b3BdOwoJCQkJCXN0YWNrW3RvcC0tXSA9IDA7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQl0b3AgPSAwOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJcHVzaCgmdG9wLCBudW0sIHN0YWNrKTsKCQkJfQoJCQlicmVhazsKCQljYXNlICddJzoKCQkJZm9yIChqID0gdG9wOyBqID4gMDsgai0tKXsJCS8vIC0yIOqygOyDie2VtOyEnCBwb3DtlaAg7JyE7LmYIO2DkOyDiQoJCQkJaWYgKHN0YWNrW2pdID09IC0yKSB7CgkJCQkJcG9wX3B0ciA9IGo7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlpZiAoaiA9PSAwKSB7CQkvLyBwb3DtlaAg6rKDIOuqu+ywvuycvOuptCBmYWlsCgkJCQkJdG9wID0gMDsKCQkJCQlpID0gMzE7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJaWYgKHBvcF9wdHIgPT0gdG9wKXsJCS8vIHBvcOydtCB0b3Dsl5DshJwg67Cc7IOd7ZWY66m0CgkJCQlwb3AoJnRvcCwgcG9wX3B0ciwgc3RhY2spOwkJLy8g7JuQ7ZWY64qUIOychOy5mCBwb3AKCQkJCW51bSA9IDM7CgkJCQlpZiAoc3RhY2tbdG9wXSA+IDApewkJLy8gK+yXsOyCsCDtm4Qg64uk7IucIHB1c2gKCQkJCQludW0gKz0gc3RhY2tbdG9wXTsKCQkJCQlzdGFja1t0b3AtLV0gPSAwOwoJCQkJfQoJCQkJcHVzaCgmdG9wLCBudW0sIHN0YWNrKTsKCQkJfQoJCQllbHNlIGlmIChwb3BfcHRyICE9IHRvcCl7CQkvLyBwb3DsnbQg7KSR6rCE7JeQIOyIq+yekOulvCDrgbzqs6Ag67Cc7IOd7ZWY66m0CgkJCQlwb3AoJnRvcCwgcG9wX3B0ciwgc3RhY2spOwkJLy8g7JuQ7ZWY64qUIOychOy5mCBwb3AKCQkJCW51bSA9IDM7CgkJCQlpZiAoc3RhY2tbdG9wXSA+IDApewkJLy8gKuyXsOyCsCDtm4Qg64uk7IucIHB1c2gKCQkJCQludW0gKj0gc3RhY2tbdG9wXTsKCQkJCQlzdGFja1t0b3AtLV0gPSAwOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJdG9wID0gMDsKCQkJCQlicmVhazsKCQkJCX0KCQkJCXB1c2goJnRvcCwgbnVtLCBzdGFjayk7CgkJCX0KCQkJYnJlYWs7CgkJfQoJfQoJcHJpbnRmKCIlZFxuIiwgdG9wID09IDEgPyBzdGFja1t0b3BdIDogMCk7CglyZXR1cm4gMDsKfQ==