かっこの値#2504


説明:
カッコのペアはstackの問題です.
問題は数字を計算するときにどうするかで、numという変数の初期値を1にし、([に出会って、それぞれ2と3を乗じます.
その後、)]に遭遇し、計算された値を加えて、numをそれぞれ2と3で再配布した.
値を1つ追加すると、現在表示されている文字(ch)の前のインデックスの文字と一致する括弧にのみ値が加算されます.
if (str[i - 1] === '(') answer += num;
Node.説明する
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim();

const solution = (str) => {
  const stack = [];
  let answer = 0;
  let num = 1;
  for (let i = 0; i < str.length; i++) {
    const ch = str[i];
    if (ch === '(') {
      stack.push('(');
      num *= 2;
    } else if (ch === ')') {
      if (stack.length === 0) return 0;
      const top = stack.pop();
      if (top === '(') {
        if (str[i - 1] === '(') {
          answer += num;
        }
        num /= 2;
      } else {
        return 0;
      }
    } else if (ch === '[') {
      stack.push('[');
      num *= 3;
    } else if (ch === ']') {
      if (stack.length === 0) return 0;
      const top = stack.pop();
      if (top === '[') {
        if (str[i - 1] === '[') {
          answer += num;
        }
        num /= 3;
      } else {
        return 0;
      }
    }
  }
  if (stack.length !== 0) return 0;
  return answer;
};

console.log(solution(input));
C++プール
#include <bits/stdc++.h>
using namespace std;

int solution(string str) {
    stack<char> S;
    int sum = 0;
    int num = 1;
    for (int i=0; i<str.length(); i++) {
        char ch = str[i];
        if (ch == '(') {
            num *= 2;
            S.push('(');
        }
        else if (ch == '[') {
            num *= 3;
            S.push('[');
        }
        else if (ch == ')') {
            if (S.empty() || S.top() != '(') return 0;
            S.pop();
            if (str[i-1] == '(') {
                sum += num;
            }
            num /= 2;
        }
        else if (ch == ']') {
            if (S.empty() || S.top() != '[') return 0;
            S.pop();
            if (str[i-1] == '[') {
                sum += num;
            }
            num /= 3;
        }
    }
    if (!S.empty()) return 0;
    return sum;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    string str; cin >> str;
    cout << solution(str) << '\n';
    return 0;
}