[白俊]鉄棒#10799
説明:
以前プログラマーで解いた質問のタイプ(「既知」と呼ぶべきか...?)
問題があまりにも似ているので,解答を覚えて,そのとおりにした.
レーザーに相当する
レーザーに遭遇した場合は、これまで積み重ねたスタックに答えを付け、
C++も同様であるがstring replace関数を用いず,現在見られている位置は
Node.説明する
以前プログラマーで解いた質問のタイプ(「既知」と呼ぶべきか...?)
問題があまりにも似ているので,解答を覚えて,そのとおりにした.
レーザーに相当する
()
の部分を別の文字に変えて、その文字をレーザーだと思って、答えに値を付けました.レーザーに遭遇した場合は、これまで積み重ねたスタックに答えを付け、
)
に遭遇した場合は、答えに1を加えるだけでよい.C++も同様であるがstring replace関数を用いず,現在見られている位置は
(
であり,次の位置が)
であればレーザであると考えられる.Node.説明する
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString();
// test
// const input = `(((()(()()))(())()))(()())`;
const solution = (input) => {
let stack = 0;
let answer = 0;
const str = input.replace(/\(\)/g, '0');
[...str].forEach((ch) => {
if (ch === '0') {
answer += stack;
} else if (ch === '(') stack += 1;
else if (ch === ')') {
stack -= 1;
answer += 1;
}
});
return answer;
};
console.log(solution(input));
C++プール#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string data; cin >> data;
int answer = 0;
int stack = 0;
for (int i=0; i<data.length(); i++) {
if (data[i] == '(') {
if (i+1 < data.length() && data[i+1] == ')') {
// 레이저
answer += stack;
i+=1;
} else {
stack += 1;
}
}
else if (data[i] == ')') {
stack -= 1;
answer += 1;
}
}
cout << answer << '\n';
return 0;
}
Reference
この問題について([白俊]鉄棒#10799), 我々は、より多くの情報をここで見つけました https://velog.io/@ahu8867/백준-쇠막대기-10799テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol