입력받고 괄호 모양에 따라 스택에 괄호를 상징하는 값을 넣으면서 계산하면 된다.
올바르지 못한 괄호열이 입력될 수 있으므로 예외조건을 잘 설정해야 한다.
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 |