[伯俊]括弧#2800を削除
説明:
久しぶりに黄金の問題をして、本当に難しいです.
回帰により
カッコペアのインデックスを使用して、カッコペアを削除するかどうかを決定します.
Node.説明する
久しぶりに黄金の問題をして、本当に難しいです.
回帰により
dfs
を実現し,問題を解決した.カッコペアのインデックスを使用して、カッコペアを削除するかどうかを決定します.
result
に入れます.((0))
に類似するinput
があれば、1番目の丸カッコ対を外し、2番目の丸カッコ対を外し、結果は同じであるため、result
の資料型をSet
として重複データ消去を行い、結果を出力する.Node.説明する
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim();
const solution = (str) => {
const stack = [];
const brackets = [];
const result = new Set();
const selected = new Array(str.length).fill(true);
for (let i = 0; i < str.length; i++) {
if (str[i] === '(') stack.push(i);
else if (str[i] === ')') brackets.push([stack.pop(), i]);
}
const dfs = (idx, cnt) => {
if (idx === brackets.length) {
if (cnt > 0) {
let temp = '';
for (let i = 0; i < str.length; i++) {
if (selected[i]) temp += str[i];
}
result.add(temp);
}
return;
}
dfs(idx + 1, cnt);
selected[brackets[idx][0]] = false;
selected[brackets[idx][1]] = false;
dfs(idx + 1, cnt + 1);
selected[brackets[idx][0]] = true;
selected[brackets[idx][1]] = true;
};
dfs(0, 0);
return [...result].sort().reduce((acc, cur) => acc + cur + '\n', '');
};
console.log(solution(input));
C++プール#include <bits/stdc++.h>
using namespace std;
string str;
bool selected[203];
vector<pair<int, int>> brackets;
set<string> result_set;
void dfs(int idx, int cnt) {
if (idx == brackets.size()) {
if (cnt > 0) {
string tmp = "";
for (int i=0; i<str.length(); i++) {
if (selected[i]) tmp += str[i];
}
result_set.insert(tmp);
}
return;
}
dfs(idx + 1, cnt);
selected[brackets[idx].first] = false;
selected[brackets[idx].second] = false;
dfs(idx + 1, cnt + 1);
selected[brackets[idx].first] = true;
selected[brackets[idx].second] = true;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
stack<int> S;
cin >> str;
for (int i=0; i<str.length(); i++) {
selected[i] = true;
if (str[i] == '(') S.push(i);
else if (str[i] == ')') {
brackets.push_back({ S.top(), i });
S.pop();
}
}
dfs(0, 0);
for (auto result : result_set) cout << result << '\n';
return 0;
}
Reference
この問題について([伯俊]括弧#2800を削除), 我々は、より多くの情報をここで見つけました https://velog.io/@ahu8867/백준-괄호-제거-2800テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol