호지

[프로그래머스] 괄호 변환 문제풀이 c++ 본문

알고리즘/프로그래머스

[프로그래머스] 괄호 변환 문제풀이 c++

_hoji

 

주어진 조건만 잘 파악하면 어려움 없이 풀 수 있다.

올바른 괄호 문자열인지 correct_str함수로 확인할 수 있다.

( 일때 +1, ) 일때 -1을 하면 음수가 나오면 올바르지 않은 괄호 문자열임을 확인할 수 있다.

w를 u와 v로 나누어 조건대로 수행한 결과를 반환하는 find수행함으로 결과를 구할 수 있다.

조건 4-1~4-5를 수행하는 함수는 change_str함수이다.

 

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

bool correct_str(string p){
    int x=0;
    for(int i=0; i<p.size(); i++){
        if(p[i]== '('){
            x++;
        }
        else{
            x--;
        }
        if(x<0)
            return false;
    }
    if(x==0)
        return true;
    else
        return false;
}
string change_str(string p){
    string a ="";
    for(int i=1; i<p.size()-1; i++){
        if(p[i]=='(')
            a+=")";
        else
            a+="(";
    }
    return a;
}

string find(string w){
    string u="",v="", ret ="";
    if(w=="")
        return w;
    
    int pos=0;
    for(int i=0; i<w.size(); i++){
        if(w[i]=='(')
            pos++;
        else
            pos--;
        if(pos == 0){
            pos = i;
            break;
        } 
    }
    if(pos == w.size()-1){
        u = w;
        v = "";
    }
    else{
        u = w.substr(0,pos+1);
        v = w.substr(pos+1);
    }
    if(correct_str(u)){
        ret = u;
        ret += find(v);
    }
    else{
        ret = "(";
        ret += find(v);
        ret +=")";
        ret += change_str(u);
    }    
    
    return ret;
}
string solution(string p) {
    string answer = "";
    
    answer = find(p);
    
    return answer;
}
Comments