๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ด„ํ˜ธ ๋ณ€ํ™˜( Level 2, 2020 KAKAO BLIND)

by ์•ˆ์ฃผํ˜• 2021. 10. 20.

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ด„ํ˜ธ ๋ณ€ํ™˜

์นด์นด์˜ค์— ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ ์ž…์‚ฌํ•œ "์ฝ˜"์€ ์„ ๋ฐฐ ๊ฐœ๋ฐœ์ž๋กœ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ์—ญ๋Ÿ‰ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ฌธ์ œ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋ผ๋Š” ์—…๋ฌด ๊ณผ์ œ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์†Œ์Šค๋ฅผ

programmers.co.kr

 

์ฝ”๋“œ

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

using namespace std;

bool check_perfect(string u){   //์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ฒดํฌ
    stack<char>st;
    for(int i=0; i<u.length(); i++){
        if(u[i]=='(') st.push(u[i]);
        else{
            if(st.empty()) st.push(u[i]);
            else if(st.top()=='(') st.pop();
            else st.push(u[i]);
        }
    }
    if(st.empty()) return true;
    else return false;
}

string make(string s){
    string u,v;
    if(s.empty()||check_perfect(s)) return s;   //๋นˆ ๋ฌธ์ž์—ด์ด๊ฑฐ๋‚˜ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฉด ๋ฐ˜ํ™˜


    int right_cnt=0,left_cnt=0;
    bool flag=false;

    for(int i=0; i<s.length(); i++){
        if(!flag){
            if(s[i]=='(') right_cnt++;
            else left_cnt++;
            u+=s[i];
            if(right_cnt==left_cnt) flag=true;
        }
        else v+=s[i];
    }

    if(check_perfect(u)){   //u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์ผ๊ฒฝ์šฐ
        return u+make(v);
    }
    else{   //u๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์•„๋‹ ๊ฒฝ์šฐ
        string inp="("+make(v)+")";
        for(int i=0; i<u.length(); i++){
            if(i!=0&&i!=u.length()-1){
                if(u[i]=='(') inp+=')';
                else inp+='(';
            }
        }
        return inp;
    }
    return 0;
}

string solution(string p) {
    string answer = "";

    answer=make(p);
    return answer;
}

๋Œ“๊ธ€