면접
프로그머스(시뮬레이션, 카카오 기출; 괄호 변환) 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);
}반응형