백준 2504

supway·2022년 2월 8일
0

백준

목록 보기
12/62

백준 2504

  1. '(' 이면 2를 곱한다
  2. '[' 이면 3을 곱한다
  3. ']' 이면 스택의 top이 '[' 일 때 닫고 sum에 합하고 pop해주고, 스택이 비었다면 0을 호출하고 종료한다.
  4. ')' 이면 스택의 top이 '(' 일 때 닫아서 sum에 합하고 pop해주고, 스택이 비었다면 0을 호출하고 종료한다.
#include<bits/stdc++.h>
using namespace std;
string s;
stack<char> stk;
int sum; int k=1;
int flag;
int main() {

	cin >> s;

	for (int i = 0; i < s.size(); i++) {
		if (s[i] == '(') { // 첫 번째 경우
			k *= 2;
			stk.push(s[i]);
		}
		else if (s[i] == '[') { // 두 번째 경우
			k *= 3;
			stk.push(s[i]);
		}
		else if (s[i] == ']') { // 세 번째 경우

			if (stk.empty()) {
				cout << 0 << '\n';
				return 0;
			}

			if (s[i - 1] == '[') sum += k;
			k /= 3;

			if(stk.top()=='[')
			stk.pop();
		}
		else { //s[i]==')' 네 번째 경우

			if (stk.empty()) {
				cout << 0 << '\n';
				return 0;
			}

			if (s[i - 1] == '(') sum += k;
			k /= 2;

			if(stk.top()=='(')
			stk.pop();
		}
	}
	if (stk.empty()) {
		cout << sum << '\n';
	}
	else {
		cout << 0 << '\n';
	}
}

처음에 어떻게 문제를 풀지 방향을 잡고, 경우의 수를 나눠서 풀면 된다.

profile
개발잘하고싶은사람

0개의 댓글