old/Algorithm

5주차 - 카카오 문제 (괄호변환)

hYhY1234 2020. 7. 12. 20:09
728x90

코드

#include <string>
#include <vector>
#include <stack>
#include <iostream>
using namespace std;

bool is_correct(string a){
    stack<char> s;
    s.push(a[0]);
    for(int i = 1; i < a.size(); i++){
        if(a[i] == '('){
            s.push(a[i]);
        }else{
            if(s.empty()){
                return false;
            }else{
                s.pop();            
            }
        }    
    }
    if(s.empty()){
        return true;
    }else{
        return false;
    }
}

string converter(string w){
    if(w == ""){
        return "";
    }
    int left = 0; 
    int right = 0;
    string u = "";
    string v = "";
    for(int i = 0; i < w.size(); i++){
        if(w[i] == '('){
            left++;
        }else{
            right++;
        }
        if(left == right){
            u = w.substr(0, i+1);
            v = w.substr(i+1);
            break;
        }
    }
    
    if(is_correct(u)){
        return u + converter(v);
    }else{
        string temp = "(" + converter(v) + ")";   
        u = u.substr(1, u.size()-2);
        for(int i = 0; i < u.size(); i++){
            if(u[i] == '('){
                temp += ")";
            }else{
                temp += "(";
            }
        }
        
        return temp;
    }
    return "hello";
}

string solution(string p) {
    string answer = converter(p);
    return answer;
}

규칙대로 재귀함수 호출!