[프로그래머스] 2020 KAKAO BLIND RECRUITMENT : 괄호 변환 (C++)
문제 링크 : 괄호 변환
[문제 접근]
그냥 문제에서 주어진 과정들을 차근차근 구현하면되는 간단한 문제이다.
문자열을 나누면서 다시 처음부터 수행하기 때문에 재귀를 사용해야한다.
과정에 재귀적으로 수행한다라는 힌트도 주어서 재귀를 사용해야한다는 것을 쉽게 알 수 있다.
균형잡힌 문자열 u,v로 분리할 때 u는 균형잡힌 괄호 문자열로 더 이상 분리할 수 없어야 하기 때문에 w를 탐색하며 최초로 균형잡힌 괄호 문자열이 완성된 순간의 문자열이 더 이상 균형잡힌 괄호 문자열로 분리할 수 없는 문자열이 된다. 그리고 나머지 문자열을 v로 반환하면 된다.
[소스 코드]
#include <string>
#include <vector>
using namespace std;
bool check(string w) {
int index=0;
for(char c : w) {
if(c=='(') {
index++;
} else {
index--;
}
if(index<0) return false;
}
return true;
}
string reverse(string u) {
string temp = "";
for(char c : u) {
if(c=='(') temp += ')';
else temp += '(';
}
return temp;
}
string solve(string w) {
if(check(w)) return w; // 올바른 괄호 문자열이거나 빈문자열이면 return
else {
string u="", v="";
int index=0;
for(int i=1 ; i<=w.size() ; i++) {
if(w[i-1]=='(') index++;
else index--;
if(index==0) { // 최초로 균형 잡힌 문자열이 완성된 순간
u = w.substr(0, i);
v = w.substr(i);
break;
}
}
if(check(u)) {
return u+solve(v);
} else {
string temp = "("+solve(v)+")";
u = u.substr(1, u.size()-2);
u = reverse(u);
temp += u;
return temp;
}
}
}
string solution(string p) {
string answer = "";
answer += solve(p);
return answer;
}
Author And Source
이 문제에 관하여([프로그래머스] 2020 KAKAO BLIND RECRUITMENT : 괄호 변환 (C++)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soosungp33/프로그래머스-2020-KAKAO-BLIND-RECRUITMENT-괄호-변환-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)