[Kakao코딩테스트] 2020-2번-괄호변환
풀이
문자열다루기
주어진조건대로 착착구현하면 문제해결!
이렇게 괄호변환 할 수가있구나 배워가는 문제.
코드
[Kakao] 2020-2-괄호변환
#include <string>
#include <vector>
using namespace std;
//0:틀림 1:균형잡힌 괄호문자열 2:올바른 괄호문자열
int check(string str) {
int a = 0;
int b = 0;
int size = str.size();
int result = 0;
for (int i = 0; i < size; i++) {
if (str[i] == '(') {
a++;
}
else {
b++;
}
}
if (a == b) {
result = 1;
int tmp = 0;
int flag = 1;
for (int i = 0; i < size; i++) {
if (str[i] == '(') {
tmp++;
}
else {
if (tmp > 0) {
tmp--;
}
else {
flag = 0;
break;
}
}
}
if (flag) {
result = 2;
}
}
return result;
}
string f(string str) {
int size = str.size();
//1
if (size == 0) {
return "";
}
//2
string u = "";
string v = "";
string result = "";
for (int i = 0; i < size; i += 2) {
u += str[i];
u += str[i + 1];
int chknum = check(u);
if (chknum > 0) {
v = str.substr(i + 2);
if (chknum == 2) {
//3
result += u;
result += f(v);
}
else {
//4
result += '(';
result += f(v);
result += ')';
for (int j = 1; j < i + 1; j++) {
if(u[j]=='('){
result += ')';
}else{
result += '(';
}
}
}
break;
}
}
return result;
}
string solution(string p) {
if (check(p) == 2) {
return p;
}
else {
return f(p);
}
}
Written on September 7, 2020