딱히 어려운것 없이 조건에 따라 시뮬레이션 돌리는 문제같다.

다만 문자열의 괄호 처리를 알맞게 해야 하며 조건을 잘 설정해야 한다.

#include <iostream>

#include <string>
#include <vector>

using namespace std;

bool IS_RIGHT(string s) {
    if(s[0] == ')')
        return false;
    
    int cnt = 1;
    for(int i = 1; i < s.size(); i++)
    {
        if(s[i] == ')')
            cnt--;
        else
            cnt++;
        if(cnt < 0)
            return false;
    }
    
    if(cnt == 0)
        return true;
    else
        return false;
}

string DFS(string s) {
    string u, v;
    
    if(s == "")
        return "";
    
    int cnt = 0;
    
    for(int i = 0; i < s.size(); i++)
    {
        if(s[i] == '(')
            cnt++;
        else
            cnt--;
        
        if(cnt == 0)
        {    
            u = s.substr(0, i + 1);
            if(i == s.size() - 1)
                v = "";
            else
                v = s.substr(i + 1, s.size());
            
            if(IS_RIGHT(u))
                return u + DFS(v);
            else
            {
                string temp = "";
                for(int j = 1; j < u.size() - 1; j++)
                {
                    if(u[j] == ')')
                        temp += '(';
                    else
                        temp += ')';
                }
                
                return '(' + DFS(v) + ')' + temp;
            }
        }
    }
}

string solution(string p) {
    string answer = "";
    
    if(p.size() == 0)
        return "";
    
    answer = DFS(p);
    
    return answer;
}

+ Recent posts