문제
programmers.co.kr/learn/courses/30/lessons/60058
코드
#include <string>
#include <vector>
using namespace std;
bool check(string str)
{
int cnt = 0;
for (int i = 0; i < str.size(); i++)
{
if (str[i] == '(')
cnt++;
else
cnt--;
if (cnt < 0)
return false;
}
return true;
}
string tranformString(string str)
{
if (str.empty())
return "";
string u, v;
int left = 0, right = 0;
for (int i = 0; i < str.size(); i++)
{
char c = str[i];
if (c == '(')
left++;
else
right++;
if (left == right)
{
u = str.substr(0, i + 1);
v = str.substr(i + 1);
break;
}
}
if (check(u))
return u + tranformString(v);
else
{
string temp = "(";
temp += tranformString(v) + ")";
u = u.substr(1, u.size() - 2);
for (int i = 0; i < u.size(); i++)
{
if (u[i] == '(')
temp += ')';
else
temp += '(';
}
return temp;
}
}
string solution(string p)
{
if (check(p))
return p;
return tranformString(p);
}
'개발 > 알고리즘' 카테고리의 다른 글
백준 15649 N과M(1) - 순열 C++ (0) | 2021.04.10 |
---|---|
프로그래머스 캐쉬 C++ (0) | 2021.04.08 |
백준 2240 자두나무 C++ (0) | 2021.04.06 |
백준 2343 기타레슨 C++ (0) | 2021.04.05 |
백준 14627번 파닭파닭 C++ (0) | 2021.04.04 |