반응형
https://programmers.co.kr/learn/courses/30/lessons/60058
재귀를 문제설명대로 구현하는 문제였습니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
bool isRightBracket(string s){
stack <char> st;
if(s == "" || s[0] == ')') return false;
for(int i = 0; i < s.size(); i++){
if(s[i] == '(') st.push(s[i]);
else{
if(st.size() && st.top() == '(') st.pop();
else return false;
}
}
if(st.size()) return false;
return true;
}
bool isBalanced(string w){
int l = 0,r = 0;
for(int i = 0; i < w.size(); i++){
if(w[i] == '(') l++;
else r++;
}
return l == r;
}
string getOpposite(string s){
string tmp = s;
for(int j = 0; j < s.size(); j++){
if(tmp[j] == '(') tmp[j] = ')';
else tmp[j] = '(';
}
return tmp;
}
string dfs(string w){
if(w == "") return "";
if(isRightBracket(w)) return w;
string newW;
for(int i = 1; i <= w.size(); i++){
string u = w.substr(0, i);
string v = w.substr(i);
if(!isBalanced(u) || !isBalanced(v)) continue;
if(!isRightBracket(u)){
string tmp = "";
tmp += '(' + dfs(v) + ')';
string tmp2 = u.substr(1, u.size()-2);
tmp2 = getOpposite(tmp2);
newW = tmp + tmp2;
}
else newW = u + dfs(v);
if(isRightBracket(newW)) return newW;
}
return newW;
}
string solution(string p) {
string answer = "";
return dfs(p);
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 프로그래머스(위클리 챌린지) : 3주차 (0) | 2021.08.23 |
---|---|
(Python) - 백준(BOJ) 20499번 : Darius님 한타 안 함? (0) | 2021.08.22 |
(C++) - 백준(BOJ) 1952번 : 달팽이 (0) | 2021.08.13 |
(C++) - 백준(BOJ) 17143번 : 낚시왕 (0) | 2021.08.13 |
(C++) - 프로그래머스(위클리 챌린지) : 2주차 (0) | 2021.08.11 |