[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