입력받고 괄호 모양에 따라 스택에 괄호를 상징하는 값을 넣으면서 계산하면 된다.


올바르지 못한 괄호열이 입력될 수 있으므로 예외조건을 잘 설정해야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <string.h>
#include <stack>
using namespace std;
 
char a[32];
stack<int> s;
int b[129], res;
 
int main() {
    b['('= b[')'= -2;
    b['['= b[']'= -3;
    scanf("%s"&a);
    int len = strlen(a);
    for (int i = 0; i < len; i++) {
        if (a[i] == '(' || a[i] == '[')
            s.push(b[a[i]]);
        else if (a[i] == ')' || a[i] == ']') {
            int sum = 0;
            while (!s.empty() && s.top() != b[a[i]]) {
                sum += s.top();
                s.pop();
            }
            if (s.empty()) {
                res = -1;
                break;
            }
            s.pop();
            sum *= -b[a[i]];
            if (!sum) sum = -b[a[i]];
            if (s.empty()) res += sum;
            else s.push(sum);
        }
    }
    printf("%d", (res > 0 && s.empty()) ? res : 0);
    return 0;
}
cs


'BOJ' 카테고리의 다른 글

14947 상자 배달  (0) 2017.12.14
14945 불장난  (0) 2017.12.12
14944 굿점원  (0) 2017.12.12
14943 벼룩시장  (0) 2017.12.12
2931 가스관  (0) 2017.12.01

+ Recent posts