-
2504) 괄호의 값 c++백준코딩일기 2020. 11. 17. 10:38
문제 ) www.acmicpc.net/problem/2504
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
풀이 )
왼쪽 괄호 '(', '['를 만나면 스택에 push 하고,
오른쪽 괄호 ')', ']'를 만나면..
1. 다시 왼쪽 괄호가 나올 때 까지 total 에 곱하고 팝
2. 짝이 안맞으면 break;
3. 마지막으로 소괄호인지, 대괄호인지 확인해서 2 또는 3을 곱함
4. 스택이 비어있지 않다면 모두 꺼내서 더한다.
코드 )
#include <iostream> #include <stack> #include <string> using namespace std; stack<string> stk; string strings; string temp; int sum, result = 1; int main() { cin >> strings; for (int i = 0; i < strings.size(); i++) { temp = strings.at(i); if (temp == "(" || temp == "[") stk.push(temp); else { sum = 1; while (!stk.empty() && stk.top() != "(" && stk.top() != "[") { sum *= stoi(stk.top()); stk.pop(); } if (stk.empty() || (temp == ")" && stk.top() != "(") || (temp == "]"&& stk.top() != "[")) { result = 0; break; } if (temp == ")") sum *= 2; else sum *= 3; stk.pop(); while (!stk.empty() && stk.top() != "(" && stk.top() != "[") { sum += stoi(stk.top()); stk.pop(); } stk.push(to_string(sum)); } } if (result == 0 || stk.size()!=1 || stk.top()=="[" || stk.top()=="(" ) cout << 0; else cout << stk.top(); return 0; }
'백준코딩일기' 카테고리의 다른 글
9093) 단어 뒤집기 c++ (0) 2020.11.19 4889) 안정적인 문자열 c++ (0) 2020.11.17 10799) 쇠막대기 c++ (0) 2020.11.17 4949) 균형잡힌 세상 c++ (0) 2020.11.17 10828) 스택 c++ (0) 2020.11.05