문제 https://www.acmicpc.net/problem/2504
풀이
스택을 이용하여 풀이한다.
()의 값은 2이고, []의 값은 3이므로 여는 괄호가 나오면 괄호 모양에 따라 각각 스택에 tmp*2 또는 tmp*3을 push 한다.
닫는 괄후가 나오면 여는 괄호와 마찬가지로 tmp/2 또는 tmp/3을 스택에서 pop 한다.
코드
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
string s;
cin>>s;
stack<char> pairst;
int result = 0, tmp = 1, val = 0;
int len = s.length();
for(int i=0; i<len; i++)
{
if(s[i]=='(' || s[i]==')') val=2;
else if(s[i]=='[' || s[i]==']') val=3;
if(s[i]=='(' || s[i]=='[')
{
tmp*=val;
pairst.push(s[i]);
}
else
{
if(i==0 || pairst.empty())
{
result = 0;
break;
}
if((pairst.top()=='(' && s[i]==']') || (pairst.top()=='[' && s[i]==')'))
{
result = 0;
break;
}
if(s[i-1]=='('||s[i-1]=='[') result+=tmp;
tmp/=val;
pairst.pop();
}
}
if(!pairst.empty()) result = 0; //()[와 같은 경우
cout<<result;
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
Problem 1600 - 말이 되고픈 원숭이(C++) (1) | 2023.11.24 |
---|---|
백준 9019 - DSLR(C++) (1) | 2023.11.23 |
백준 11292 - 키 큰 사람(C++) (0) | 2022.12.04 |
백준 4470 - 줄번호 (0) | 2022.11.17 |
백준 17608 - 막대기(C++) (0) | 2022.11.08 |