와이유스토리

[DFS 조합] 프로그래머스 괄호 변환 C++ 본문

코딩테스트/그래프|트리

[DFS 조합] 프로그래머스 괄호 변환 C++

유(YOO) 2021. 12. 30. 14:40

 

https://programmers.co.kr/learn/courses/30/lessons/60058

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

w를 u와 v의 조합으로 분리

#include <string>
#include <vector>
#include <stack>
#include <algorithm>
#include <iostream>

using namespace std;

string dfs(string p, int a, string answer)
{
    stack<char> s;
    if (p.length() == a) return "";
    
    int l = 0;
    int r = 0;
    
    for(int i=a; i<p.length(); i++) {
        if (p[i]=='(') {
            l++;
            s.push(p[i]);
        }
        else if (p[i] == ')') {
            r++;
            if (s.size()!=0) // empty X {
                if (s.top()=='(') s.pop();
            }
        }
        
        // 균형잡힌 괄호 문자열
        if (l==r) {
        	// 올바른 괄호 문자열
            if(s.empty()) {
                answer=p.substr(a,i+1-a); // u
                answer+=dfs(p, i+1, answer); // v
                return answer;
            }
            // 올바른 괄호 문자열X
            else {
                string str = "(";
                str+=dfs(p, i+1, answer); // v
                str+=')';
                
                string temp = p.substr(a+1,i-(a+1)); // u
                
                // 나머지 괄호 방향 뒤집기(문자열 뒤집기X)
                for(int i=0; i<temp.length(); i++) {
                    if (temp[i]=='(') temp[i]=')';
                    else temp[i]='(';
                }
                
                str+=temp;
                return str;
            }
        }
    }
    return answer;
}

string solution(string p) { 
    string answer = "";
    answer = dfs(p, 0, answer);
    
    return answer;
}
Comments