면접

프로그머스(시뮬레이션, 카카오 기출; 괄호 변환) c++

코닥쿠 2026. 8. 31. 14:04
반응형
#include <string>
#include <vector>

using namespace std;

int finalBalancedPoint(string w)
{
    int open = 0, close = 0;
    for (int i = 0; i < w.size(); ++i)
    {
        if(w[i] == '(') open++;
        else close++;
        
        if(open==close) return i + 1;
    }
    return w.size();
}

bool isCorrect(string u)
{
    int balance = 0;
    for(char c : u)
    {
        if(c == '(') balance++;
        else balance--;
        
        if (balance < 0) return false;
    }
    return true;
}

string solve(string w)
{
    if(w.empty()) return w;
    
    int idx = finalBalancedPoint(w);
    string u = w.substr(0, idx);
    string v = w.substr(idx);
    
    if(isCorrect(u))
    {
        return u + solve(v);
    }
    else
    {
        string result = "(" + solve(v) + ")";
        
        string middle = u.substr(1, u.size() - 2);
        for(char& c : middle)
        {
            c = (c == '(') ? ')' : '(';
        }
        
        result += middle;
        return result;
    }
}

string solution(string p) 
{
    return solve(p);
}
반응형