백준 [2504] "괄호의 값"

Kimbab1004·2024년 8월 6일
0

Algorithm

목록 보기
64/102

짝이 직전에 맞지 않는 괄호들은 직전에 짝이 맞은 괄호를 위한 수단에 불구하다.

정답 출처

#include<iostream> 
#include<stack>
#include<string.h>

using namespace std;
int main()
{
	stack<char> s;
	string str;
	int answer = 0, temp = 1;
	cin >> str;

	for (int i = 0; i < str.length(); i++)
	{
		if (str[i] == '(') //일단 시작괄호는 무조건 2를 곱함
		{
			temp *= 2;
			s.push('(');
		}
		else if (str[i] == '[') //일단 시작괄호는 무조건 3을 곱함
		{
			temp *= 3;
			s.push('[');
		}
		else if (str[i] == ')')
		{
			//잘못된 괄호 맺음인 경우
			if (s.empty() || s.top() != '(')
			{
				answer = 0;
				break;
			}
			if (str[i - 1] == '(')
			{
				answer += temp;
			}
			temp /= 2;
			s.pop();
		}
		else if (str[i] == ']')
		{
			if (s.empty() || s.top() != '[')
			{
				//잘못된 괄호 맺음인 경우
				answer = 0;
				break;
			}
			if (str[i - 1] == '[')
			{
				answer += temp;
			}
			temp /= 3;
			s.pop();
		}
	}
	if (!s.empty())
	{
		answer = 0;
	}
	std::cout << answer;
}

0개의 댓글