Programers:かっこを変換


かっこの変換



コード#コード#

#include <string>
#include <vector>
#include <stack>
#include <iostream>
//1203 ~ 1:01
using namespace std;
bool checkStr(string s){
    stack<char> check;
    check.push(s[0]);
    for(int i=1;i<s.length();i++){
        if(!check.empty() && (check.top() == '(' && s[i] == ')')) check.pop();
        else check.push(s[i]);
    }
    if(check.empty()) return true;
    return false;
}
string recur(string w){
    string u="",v="";
    stack<char> div;
    if(w.length() == 0) return "";
    if(checkStr(w)) return w;
    div.push(w[0]);
    /* u와 v로 분리 */
    for(int i=1;i<w.length();i++){
        if((div.top()=='(' && w[i]==')') || (div.top()==')' && w[i]=='(')){
            div.pop();
            if(div.empty()){
                u = w.substr(0,i+1);
                v = w.substr(i+1);
                break;
            }
        }else div.push(w[i]);
    }
    /* u가 올바른 괄호문자열인지 검사 */
    bool result = checkStr(u);
    /* 올바른 경우 : v로 다시 1번부터 재귀적 수행 */
    string str;
    if(result == true) str = u + recur(v);
     /* 올바르지 않은 경우 :  */
    else{
        string newU="";
        u.erase(0,1);
        u.erase(u.length()-1,1);
        for(int i=0;i<u.length();i++)  newU += (u[i] == '(' ? ")" : "(");
        str = "("+ recur(v) +")" + newU;
    }
    return str;
}

string solution(string p) {
    string answer = "";
    answer = recur(p);
    return answer;
}
  • 解決可能な問題
  • を既定の論理に従って逐次漸進的に実施する.