かっこの値#2504
説明:
カッコのペアはstackの問題です.
問題は数字を計算するときにどうするかで、
その後、
値を1つ追加すると、現在表示されている文字(
カッコのペアは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;
}
Reference
この問題について(かっこの値#2504), 我々は、より多くの情報をここで見つけました https://velog.io/@ahu8867/백준-괄호의-값-2504テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol