반응형
    
    
    
  https://programmers.co.kr/learn/courses/30/lessons/60058
코딩테스트 연습 - 괄호 변환
카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를
programmers.co.kr
재귀를 문제설명대로 구현하는 문제였습니다.
📕 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 |