괄호 변환(링크)
차분히 주어진 순서대로 구현하면 어렵지 않은 문제. 정수를 증감 시키며 괄호의 균형을 확인하면 편하다.
정수 변수를 두고 ( 가 나오면 증가, ) 가 나오면 감소시킨다. 변수가 음수가 된다면 ) 가 먼저 나온 것이므로 올바른 문자열이 아니고, 균형만 확인하고 싶다면 마지막에 0 이 되는지만 확인하면 된다.
string solution(string p) {
if (p.empty()) return p;
string u = "", v = "";
int i = 0, c = 0;
for (i = 0; i < p.size(); ++i) {
p[i] == '(' ? ++c : --c;
u += p[i];
if (c == 0) break;
}
v = p.substr(i + 1);
bool isCorrect = true;
for (const auto& e: u) {
e == '(' ? ++c : --c;
if (c == -1) { isCorrect = false; break; }
}
if (isCorrect) return u + solution(v);
else {
u.erase(0, 1).erase(u.size() - 1);
for (auto& e: u) e = (e == '(') ? ')' : '(';
return '(' + solution(v) + ')' + u;
}
}
'Problem Sovling Online Judge > 프로그래머스' 카테고리의 다른 글
[프로그래머스/20년 카카오 블라인드] 자물쇠와 열쇠(Lv.3), C++ (0) | 2022.04.02 |
---|---|
[프로그래머스/20년 카카오 블라인드] 문자열 압축(Lv.2), C++ (0) | 2022.03.30 |