본문 바로가기

개발/알고리즘

프로그래머스 괄호변환 C++

문제

programmers.co.kr/learn/courses/30/lessons/60058

 

코드

#include <string>
#include <vector>

using namespace std;

bool check(string str)
{
    int cnt = 0;
    for (int i = 0; i < str.size(); i++)
    {
        if (str[i] == '(')
            cnt++;
        else
            cnt--;

        if (cnt < 0)
            return false;
    }

    return true;
}

string tranformString(string str)
{
    if (str.empty())
        return "";

    string u, v;
    int left = 0, right = 0;
    for (int i = 0; i < str.size(); i++)
    {
        char c = str[i];
        if (c == '(')
            left++;
        else
            right++;

        if (left == right)
        {
            u = str.substr(0, i + 1);
            v = str.substr(i + 1);
            break;
        }
    }

    if (check(u))
        return u + tranformString(v);
    else
    {
        string temp = "(";
        temp += tranformString(v) + ")";
        u = u.substr(1, u.size() - 2);
        for (int i = 0; i < u.size(); i++)
        {
            if (u[i] == '(')
                temp += ')';
            else
                temp += '(';
        }
        return temp;
    }
}

string solution(string p)
{
    if (check(p))
        return p;

    return tranformString(p);
}

'개발 > 알고리즘' 카테고리의 다른 글

백준 15649 N과M(1) - 순열 C++  (0) 2021.04.10
프로그래머스 캐쉬 C++  (0) 2021.04.08
백준 2240 자두나무 C++  (0) 2021.04.06
백준 2343 기타레슨 C++  (0) 2021.04.05
백준 14627번 파닭파닭 C++  (0) 2021.04.04