프로그래머스 - 괄호 변환

well-life-gm·2021년 11월 16일
0

프로그래머스

목록 보기
59/125

프로그래머스 - 괄호 변환

문제에서 주어진데로 재귀로 구현하면 된다...
1~4까지 너무 구현을 할 수 있도록 깔끔하게 적어놔서 그대로 구현하면 된다.

#include <string>
#include <cstdio>
#include <vector>
#include <stack>

using namespace std;

string solve(const string &p)
{
    if(p.empty())
        return "";
    
    int balance = 0, start = 0, end = 0;
    for(int i=0;i<p.size();i++) {
        if(p[i] == '(') 
            balance++;
        else 
            balance--;
        if(balance == 0) {
            end = i;
            break;
        }
    }
    string u = p.substr(start, end - start + 1);
    string v = p.substr(end + 1, p.size() - end + 1);
    
    stack<char> st;
    bool is_right = true;
    for(int i=0;i<u.size();i++) {
        if(u[i] == '(') 
            st.push(u[i]);
        else {
            if(!st.empty()) 
                st.pop();
            else {
                is_right = false;
                break;
            }   
        }
    }
    if(is_right) 
        return u + solve(v);
    
    string e = "(" + solve(v) + ")";
    u.erase(0, 1);
    u.erase(u.size() - 1, 1);
    for(int i=0;i<u.size();i++) 
        u[i] = u[i] == ')' ? '(' : ')';
    e += u;
    
    return e;
}
string solution(string p) {    
    return solve(p);
}

결과

profile
내가 보려고 만든 블로그

0개의 댓글