Level.2_괄호 변환 본문

알고리즘_프로그래머스/KAKAO

Level.2_괄호 변환

giron 2021. 3. 7. 20:17
728x90

카카오 level2! 처음에 함수로 안만들고 구현했더니 틀렸었다. 아무래도 재귀함수를 이용해야 해서 그랬던것 같다.

그래도 알고리즘 설명이 문제에 나와있어서 손쉽게 풀수 있었다!

#include <string>
#include <vector>

using namespace std;

//u가 올바른 문자열인지
bool All(string u){
    vector<char> vec;
    vec.push_back('a');
    
     for(int i=0;i<u.length(); ++i){

        if(u[i] == '('){
            vec.push_back(u[i]);
        }
        else if(u[i] == ')'){
                if(vec.back() == '('){
                    vec.pop_back();
                    continue;
                }
                else{
                    vec.push_back(u[i]);
                }
        }
    }
    if(vec.size()==1){
        return true;
    }
    return false;
}
   

string solution(string p) {
    string answer = "";
    string u="";
    int l=0;
    int r=0;
    string v="";
    
    vector<char> vec;
    if(p.length()==0){
        return answer;
    }
    for(int i=0;i<p.length(); ++i){
        
        if(p[i] == '('){
            u+=p[i];
            l++;
        }
        if(p[i]==')'){
            u+=p[i];
            r++;
        }
        if(l!=0 && r!=0 &&l == r){
            v = p.substr(i+1);
            break;
        }
    }
    if(All(u)){
       u += solution(v);
        return u;
    }
    else{
        answer+='(';
        answer+=solution(v);
        answer+=')';
        for(int i=1;i<u.length()-1; ++i){
            if(u[i]==')'){
                answer+='(';
            }
            else{
                answer+=')';
            }
        }
        return answer;
    }
}

 

728x90
Comments