2504カッコの値-javascript
📌 質問する
https://www.acmicpc.net/problem/2504
📌 に答える
✔入力終了の括弧ですがスタックが空では不可能なので0を出力します.
✔
✔または]同じ状況の数量があります.
exの場合スタックの最上位レベル(
不可能である場合、出力0 スタックの最上位レベルが[時]
この場合、[をポップアップして[]の3をスタック にプッシュするだけです.スタックの上部はnumber、2番目の上部は[時]
pop 2回、push number*3 スタックの上部は(時は|スタックの上部は数字、2番目の上部は(時は)
不可能である場合、出力0
✔難易度:白駿基準シルバー2
https://www.acmicpc.net/problem/2504
📌 に答える
const fs = require('fs');
const { exit } = require('process');
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let arr = input[0].split('');
let stack = [];
for (let i = 0; i < arr.length; i++) {
if (stack.length === 0 && (arr[i] === ')' || arr[i] === ']')) {
console.log(0);
exit();
}
if (arr[i] === '(' || arr[i] === '[') stack.push(arr[i]);
if (arr[i] === ')') {
if (stack[stack.length - 1] === '(') {
stack.pop();
stack.push(2);
} else if (
stack[stack.length - 2] === '(' &&
stack[stack.length - 1] !== '['
) {
const num = stack.pop();
stack.pop();
stack.push(2 * num);
} else {
console.log(0);
exit();
}
}
if (arr[i] === ']') {
if (stack[stack.length - 1] === '[') {
stack.pop();
stack.push(3);
} else if (
stack[stack.length - 2] === '[' &&
stack[stack.length - 1] !== '('
) {
const num = stack.pop();
stack.pop();
stack.push(3 * num);
} else {
console.log(0);
exit();
}
}
if (
typeof stack[stack.length - 1] === 'number' &&
typeof stack[stack.length - 2] === 'number'
) {
const num = stack[stack.length - 1] + stack[stack.length - 2];
stack.pop();
stack.pop();
stack.push(num);
}
}
if (stack.length !== 1 || typeof stack[0] !== 'number') {
console.log(0);
} else {
console.log(stack[0]);
}
✔アルゴリズム:実装+スタック✔入力終了の括弧ですがスタックが空では不可能なので0を出力します.
✔
✔または]同じ状況の数量があります.
exの場合
不可能である場合、出力0
この場合、[をポップアップして[]の3をスタック
if (arr[i] === ']') {
if (stack[stack.length - 1] === '[') {
stack.pop();
stack.push(3);
}
}
pop 2回、push number*3
if (arr[i] === ']') {
... 위의 if 문 통과 후
else if (
stack[stack.length - 2] === '[' &&
stack[stack.length - 1] !== '('
) {
const num = stack.pop();
stack.pop();
stack.push(3 * num);
}
}
不可能である場合、出力0
if (arr[i] === ']') {
... 위의 if 문 통과 후
else {
console.log(0);
exit();
}
}
✔for文の最後に、常にstackの上部と下部をチェックして、カッコに複数の数字が含まれていないことを確認します.if (
typeof stack[stack.length - 1] === 'number' &&
typeof stack[stack.length - 2] === 'number'
) {
const num = stack[stack.length - 1] + stack[stack.length - 2];
stack.pop();
stack.pop();
stack.push(num);
}
100 stackの長さが1ではないか、長さが1ではないが、stack[0]が括弧の場合は無効な括弧である.if (stack.length !== 1 || typeof stack[0] !== 'number') {
console.log(0);
}
✔以上の条件を通過すると、stackの長さが1、stack[0]がnumberとなるので、stack[0]を出力する✔難易度:白駿基準シルバー2
Reference
この問題について(2504カッコの値-javascript), 我々は、より多くの情報をここで見つけました https://velog.io/@ywc8851/백준-2504-괄호의-값-javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol