#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 num = 0;
int top = 0;
int pop_ptr = 0;
char queue[32] = { 0 };
int stack[32] = { 0 };
for (int i = 1; i < 31; i++) // 입력받은 문자열 queue를 하나씩 stack에 push/pop
{
if (queue[i] == NULL){ // dequeue가 끝나면 계산된 숫자를 출력
break;
}
switch (queue[i]){
case '(': // ( 들어오면 -1로 push
push(&top, -1, stack);
break;
case '[': // [ 들어오면 -2로 push
push(&top, -2, stack);
break;
case ')':
for (int i = top; i >= 0; i--){ // -1 검색해서 pop할 위치 탐색
if (stack[i] == -1) {
pop_ptr = i;
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;
}
push(&top, num, stack);
}
break;
case ']':
for (int i = top; i >= 0; i--){
if (stack[i] == -2) {
pop_ptr = i;
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;
}
push(&top, num, stack);
}
break;
}
}
if (top
== 1) printf("%d\n", stack
[top
]); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHB1c2goaW50KiB0b3AsIGludCBjLCBpbnQqIHN0YWNrKXsKCWlmICgoYz4wKSYmKHN0YWNrWyp0b3BdID4gMCkpewoJCXN0YWNrWyp0b3BdICs9IGM7CgkJcmV0dXJuOwoJfQoJKCp0b3ApKys7CglzdGFja1sqdG9wXSA9IGM7CgkKCXJldHVybjsKfQoKdm9pZCBwb3AoaW50KiB0b3AsIGludCBwdHIsIGludCogc3RhY2spewoJZm9yIChpbnQgaSA9IHB0cjsgaSA8ICp0b3A7IGkrKyl7CgkJc3RhY2tbaV0gPSBzdGFja1tpICsgMV07Cgl9CglzdGFja1sqdG9wXSA9IDA7CgkoKnRvcCktLTsKCXJldHVybjsKfQoKaW50IG1haW4oKQp7CglpbnQgbnVtID0gMDsKCWludCB0b3AgPSAwOwoJaW50IHBvcF9wdHIgPSAwOwoJY2hhciBxdWV1ZVszMl0gPSB7IDAgfTsKCWludCBzdGFja1szMl0gPSB7IDAgfTsKCQoJc2NhbmYoIiVzIiwgcXVldWUrMSk7Cglmb3IgKGludCBpID0gMTsgaSA8IDMxOyBpKyspCQkvLyDsnoXroKXrsJvsnYAg66y47J6Q7Je0IHF1ZXVl66W8IO2VmOuCmOyUqSBzdGFja+yXkCBwdXNoL3BvcAoJewoJCWlmIChxdWV1ZVtpXSA9PSBOVUxMKXsJCS8vIGRlcXVldWXqsIAg64Gd64KY66m0IOqzhOyCsOuQnCDsiKvsnpDrpbwg7Lac66ClCgkJCWJyZWFrOwoJCX0KCQlzd2l0Y2ggKHF1ZXVlW2ldKXsKCQljYXNlICcoJzoJCS8vICgg65Ok7Ja07Jik66m0IC0x66GcIHB1c2gKCQkJcHVzaCgmdG9wLCAtMSwgc3RhY2spOwoJCQlicmVhazsKCQljYXNlICdbJzoJCS8vIFsg65Ok7Ja07Jik66m0IC0y66GcIHB1c2gKCQkJcHVzaCgmdG9wLCAtMiwgc3RhY2spOwoJCQlicmVhazsKCQljYXNlICcpJzoJCQoJCQlmb3IgKGludCBpID0gdG9wOyBpID49IDA7IGktLSl7CQkvLyAtMSDqsoDsg4ntlbTshJwgcG9w7ZWgIOychOy5mCDtg5Dsg4kKCQkJCWlmIChzdGFja1tpXSA9PSAtMSkgewoJCQkJCXBvcF9wdHIgPSBpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmIChwb3BfcHRyID09IHRvcCl7CQkvLyBwb3DsnbQgdG9w7JeQ7IScIOuwnOyDne2VmOuptAoJCQkJcG9wKCZ0b3AsIHBvcF9wdHIsIHN0YWNrKTsJCS8vIOybkO2VmOuKlCDsnITsuZggcG9wCgkJCQludW0gPSAyOwoJCQkJaWYgKHN0YWNrW3RvcF0gPiAwKXsJCS8vICvsl7DsgrAg7ZuEIOuLpOyLnCBwdXNoCgkJCQkJbnVtICs9IHN0YWNrW3RvcF07CgkJCQkJc3RhY2tbdG9wLS1dID0gMDsKCQkJCX0KCQkJCXB1c2goJnRvcCwgbnVtLCBzdGFjayk7CgkJCX0KCQkJZWxzZSBpZiAocG9wX3B0ciAhPSB0b3ApewkJLy8gcG9w7J20IOykkeqwhOyXkCDsiKvsnpDrpbwg64G86rOgIOuwnOyDne2VmOuptAoJCQkJcG9wKCZ0b3AsIHBvcF9wdHIsIHN0YWNrKTsJCS8vIOybkO2VmOuKlCDsnITsuZggcG9wCgkJCQludW0gPSAyOwoJCQkJaWYgKHN0YWNrW3RvcF0gPiAwKXsJCS8vICrsl7DsgrAg7ZuEIOuLpOyLnCBwdXNoCgkJCQkJbnVtICo9IHN0YWNrW3RvcF07CgkJCQkJc3RhY2tbdG9wLS1dID0gMDsKCQkJCX0KCQkJCXB1c2goJnRvcCwgbnVtLCBzdGFjayk7CgkJCX0KCQkJYnJlYWs7CgkJY2FzZSAnXSc6CgkJCWZvciAoaW50IGkgPSB0b3A7IGkgPj0gMDsgaS0tKXsKCQkJCWlmIChzdGFja1tpXSA9PSAtMikgewoJCQkJCXBvcF9wdHIgPSBpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmIChwb3BfcHRyID09IHRvcCl7CQkvLyBwb3DsnbQgdG9w7JeQ7IScIOuwnOyDne2VmOuptAoJCQkJcG9wKCZ0b3AsIHBvcF9wdHIsIHN0YWNrKTsJCS8vIOybkO2VmOuKlCDsnITsuZggcG9wCgkJCQludW0gPSAzOwoJCQkJaWYgKHN0YWNrW3RvcF0gPiAwKXsJCS8vICvsl7DsgrAg7ZuEIOuLpOyLnCBwdXNoCgkJCQkJbnVtICs9IHN0YWNrW3RvcF07CgkJCQkJc3RhY2tbdG9wLS1dID0gMDsKCQkJCX0KCQkJCXB1c2goJnRvcCwgbnVtLCBzdGFjayk7CgkJCX0KCQkJZWxzZSBpZiAocG9wX3B0ciAhPSB0b3ApewkJLy8gcG9w7J20IOykkeqwhOyXkCDsiKvsnpDrpbwg64G86rOgIOuwnOyDne2VmOuptAoJCQkJcG9wKCZ0b3AsIHBvcF9wdHIsIHN0YWNrKTsJCS8vIOybkO2VmOuKlCDsnITsuZggcG9wCgkJCQludW0gPSAzOwoJCQkJaWYgKHN0YWNrW3RvcF0gPiAwKXsJCS8vICrsl7DsgrAg7ZuEIOuLpOyLnCBwdXNoCgkJCQkJbnVtICo9IHN0YWNrW3RvcF07CgkJCQkJc3RhY2tbdG9wLS1dID0gMDsKCQkJCX0KCQkJCXB1c2goJnRvcCwgbnVtLCBzdGFjayk7CgkJCX0KCQkJYnJlYWs7CgkJfQoJfQoJaWYgKHRvcCA9PSAxKSBwcmludGYoIiVkXG4iLCBzdGFja1t0b3BdKTsKCWVsc2UgcHJpbnRmKCIwXG4iKTsKCXJldHVybiAwOwp9