PS/백준 알고리즘[BOJ]
[백준 2504번] 괄호의 값 (C++)
BE_개발자
2023. 12. 21. 13:44
728x90
반응형
stack의 이용한 괄호쌍의 유효성 검사 문제이다. 하지만 이 문제는 값이 존재하여 연산이 추가되었다.
먼저, 괄호가 닫힐 때마다 곱해진 값을 더해주고 갱신하면서 계산하려고 했으나 앞의 값들이 다 날아가는 문제가 생겼다.
다른 방법을 다른 블로그들을 참고하다 괄호가 열릴 때 미리 계산해야 한다는 사실을 깨달았고 이 과정에서 분배법칙을 이용하였다.
#include<iostream>
#include<stack>
#include<string>
using namespace std;
string str;
int temp, ans;
stack<char> bracket;
char pre;
int main(void){
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0);
temp = 1;
cin >> str;
for(auto e : str){
if(e == '(' || e == '[') {
bracket.push(e);
if(e == '(') temp *= 2;
else temp *= 3;
pre = e;
continue;
}
if(bracket.empty()) {
ans = 0;
break;
}
if(e == ')' && bracket.top() == '(') {
if(pre == '(') ans += temp;
temp /= 2;
bracket.pop();
pre = e;
}
else if(e == ']' && bracket.top() == '[') {
if(pre == '[') ans += temp;
temp /= 3;
bracket.pop();
pre = e;
}
else{
ans = 0;
break;
}
}
if(bracket.empty()) cout << ans;
else cout << 0;
return 0;
}
728x90
반응형