#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;
}
else {
top = 0;
break;
}
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;
}
else {
top = 0;
break;
}
push(&top, num, stack);
}
break;
}
}
if (top
== 1) printf("%d\n", stack
[top
]); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHB1c2goaW50KiB0b3AsIGludCBjLCBpbnQqIHN0YWNrKXsKCWlmICgoYz4wKSAmJiAoc3RhY2tbKnRvcF0gPiAwKSl7CgkJc3RhY2tbKnRvcF0gKz0gYzsKCQlyZXR1cm47Cgl9CgkoKnRvcCkrKzsKCXN0YWNrWyp0b3BdID0gYzsKCglyZXR1cm47Cn0KCnZvaWQgcG9wKGludCogdG9wLCBpbnQgcHRyLCBpbnQqIHN0YWNrKXsKCWZvciAoaW50IGkgPSBwdHI7IGkgPCAqdG9wOyBpKyspewoJCXN0YWNrW2ldID0gc3RhY2tbaSArIDFdOwoJfQoJc3RhY2tbKnRvcF0gPSAwOwoJKCp0b3ApLS07CglyZXR1cm47Cn0KCmludCBtYWluKCkKewoJaW50IG51bSA9IDA7CglpbnQgdG9wID0gMDsKCWludCBwb3BfcHRyID0gMDsKCWNoYXIgcXVldWVbMzJdID0geyAwIH07CglpbnQgc3RhY2tbMzJdID0geyAwIH07CgoJc2NhbmYoIiVzIiwgcXVldWUgKyAxKTsKCWZvciAoaW50IGkgPSAxOyBpIDwgMzE7IGkrKykJCS8vIOyeheugpeuwm+ydgCDrrLjsnpDsl7QgcXVldWXrpbwg7ZWY64KY7JSpIHN0YWNr7JeQIHB1c2gvcG9wCgl7CgkJaWYgKHF1ZXVlW2ldID09IE5VTEwpewkJLy8gZGVxdWV1ZeqwgCDrgZ3rgpjrqbQg6rOE7IKw65CcIOyIq+yekOulvCDstpzroKUKCQkJYnJlYWs7CgkJfQoJCXN3aXRjaCAocXVldWVbaV0pewoJCWNhc2UgJygnOgkJLy8gKCDrk6TslrTsmKTrqbQgLTHroZwgcHVzaAoJCQlwdXNoKCZ0b3AsIC0xLCBzdGFjayk7CgkJCWJyZWFrOwoJCWNhc2UgJ1snOgkJLy8gWyDrk6TslrTsmKTrqbQgLTLroZwgcHVzaAoJCQlwdXNoKCZ0b3AsIC0yLCBzdGFjayk7CgkJCWJyZWFrOwoJCWNhc2UgJyknOgoJCQlmb3IgKGludCBpID0gdG9wOyBpID49IDA7IGktLSl7CQkvLyAtMSDqsoDsg4ntlbTshJwgcG9w7ZWgIOychOy5mCDtg5Dsg4kKCQkJCWlmIChzdGFja1tpXSA9PSAtMSkgewoJCQkJCXBvcF9wdHIgPSBpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmIChwb3BfcHRyID09IHRvcCl7CQkvLyBwb3DsnbQgdG9w7JeQ7IScIOuwnOyDne2VmOuptAoJCQkJcG9wKCZ0b3AsIHBvcF9wdHIsIHN0YWNrKTsJCS8vIOybkO2VmOuKlCDsnITsuZggcG9wCgkJCQludW0gPSAyOwoJCQkJaWYgKHN0YWNrW3RvcF0gPiAwKXsJCS8vICvsl7DsgrAg7ZuEIOuLpOyLnCBwdXNoCgkJCQkJbnVtICs9IHN0YWNrW3RvcF07CgkJCQkJc3RhY2tbdG9wLS1dID0gMDsKCQkJCX0KCQkJCXB1c2goJnRvcCwgbnVtLCBzdGFjayk7CgkJCX0KCQkJZWxzZSBpZiAocG9wX3B0ciAhPSB0b3ApewkJLy8gcG9w7J20IOykkeqwhOyXkCDsiKvsnpDrpbwg64G86rOgIOuwnOyDne2VmOuptAoJCQkJcG9wKCZ0b3AsIHBvcF9wdHIsIHN0YWNrKTsJCS8vIOybkO2VmOuKlCDsnITsuZggcG9wCgkJCQludW0gPSAyOwoJCQkJaWYgKHN0YWNrW3RvcF0gPiAwKXsJCS8vICrsl7DsgrAg7ZuEIOuLpOyLnCBwdXNoCgkJCQkJbnVtICo9IHN0YWNrW3RvcF07CgkJCQkJc3RhY2tbdG9wLS1dID0gMDsKCQkJCX0KCQkJCWVsc2UgewoJCQkJCXRvcCA9IDA7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlwdXNoKCZ0b3AsIG51bSwgc3RhY2spOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgJ10nOgoJCQlmb3IgKGludCBpID0gdG9wOyBpID49IDA7IGktLSl7CgkJCQlpZiAoc3RhY2tbaV0gPT0gLTIpIHsKCQkJCQlwb3BfcHRyID0gaTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQlpZiAocG9wX3B0ciA9PSB0b3ApewkJLy8gcG9w7J20IHRvcOyXkOyEnCDrsJzsg53tlZjrqbQKCQkJCXBvcCgmdG9wLCBwb3BfcHRyLCBzdGFjayk7CQkvLyDsm5DtlZjripQg7JyE7LmYIHBvcAoJCQkJbnVtID0gMzsKCQkJCWlmIChzdGFja1t0b3BdID4gMCl7CQkvLyAr7Jew7IKwIO2bhCDri6Tsi5wgcHVzaAoJCQkJCW51bSArPSBzdGFja1t0b3BdOwoJCQkJCXN0YWNrW3RvcC0tXSA9IDA7CgkJCQl9CgkJCQlwdXNoKCZ0b3AsIG51bSwgc3RhY2spOwoJCQl9CgkJCWVsc2UgaWYgKHBvcF9wdHIgIT0gdG9wKXsJCS8vIHBvcOydtCDspJHqsITsl5Ag7Iir7J6Q66W8IOuBvOqzoCDrsJzsg53tlZjrqbQKCQkJCXBvcCgmdG9wLCBwb3BfcHRyLCBzdGFjayk7CQkvLyDsm5DtlZjripQg7JyE7LmYIHBvcAoJCQkJbnVtID0gMzsKCQkJCWlmIChzdGFja1t0b3BdID4gMCl7CQkvLyAq7Jew7IKwIO2bhCDri6Tsi5wgcHVzaAoJCQkJCW51bSAqPSBzdGFja1t0b3BdOwoJCQkJCXN0YWNrW3RvcC0tXSA9IDA7CgkJCQl9CgkJCQllbHNlIHsKCQkJCQl0b3AgPSAwOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJcHVzaCgmdG9wLCBudW0sIHN0YWNrKTsKCQkJfQoJCQlicmVhazsKCQl9Cgl9CglpZiAodG9wID09IDEpIHByaW50ZigiJWRcbiIsIHN0YWNrW3RvcF0pOwoJZWxzZSBwcmludGYoIjBcbiIpOwoJcmV0dXJuIDA7Cn0=