오늘의 알고리즘
[C++]2020 KAKAO BLIND RECRUITMENT괄호 변환(프로그래머스 2레벨)
하늘하늘 .
2022. 2. 15. 21:31
#include <string>
#include <vector>
using namespace std;
string Change(string p)
{
if (p == "")
return p;
int iSize = p.size();
int iPlus = 0;
bool bWhere = false;
// 처음 시작이 제대로인지 체크
if (p[0] == '(')
bWhere = true;
else
bWhere = false;
for (int i = 0; i < iSize; ++i)
{
if (p[i] == '(')
++iPlus;
else if (p[i] == ')')
--iPlus;
// 세트가 정해지고 제대로된 상태라면 제대로 시작
if (iPlus == 0 && bWhere)
{
string iFirst = p.substr(0, i + 1);
string iEnd = p.substr(i + 1, iSize - i);
return iFirst + Change(iEnd);
}
// 세트가 정해지고 잘 못 시작되었다면 변경
else if (iPlus == 0 && !bWhere)
{
if (i > 2)
{
string iFirst = p.substr(1, i - 1);
int iFirstSize = iFirst.size();
for (int i = 0; i < iFirstSize; ++i)
{
if (iFirst[i] == '(')
iFirst[i] = ')';
else if (iFirst[i] == ')')
iFirst[i] = '(';
}
string iEnd = p.substr(i + 1, iSize - i);
return "(" + Change(iEnd) + ")" + iFirst;
}
else
{
string iEnd = p.substr(i + 1, iSize - i);
return "(" + Change(iEnd) + ")";
}
}
}
}
string solution(string p)
{
return Change(p);
}
문제를 잘 못 해석해서 좀 헤맸다.
문제를 이해만 잘했다면 바로 풀었을 수도 있었을 문제
+ 앞에서 "(" 시작이면 끝이 어떻게 되든 제대로 닫힐 예정이라 상관없다.