https://programmers.co.kr/learn/courses/30/lessons/60058
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
// 문자열의 앞뒤를 자르고 괄호 반전
string make_reverse_except_ft(const string &u)
{
    string tmp = u.substr(1, u.size() - 2);
    for (char &c : tmp)
    {
        c = ((c == '(') ? ')' : '(');
    }
    return tmp;
}
// 틀린 문자열 시작 인덱스 반환
int get_wrong_string_start(const string &s)
{
    int cnt = 0;
    int balanced = 0;
    for (int i = 0; i < s.size(); ++i)
    {
        if (s[i] == '(')
            ++cnt;
        else
            --cnt;
        if (cnt == 0)
        {
            balanced = i;
            break;
        }
    }
    return balanced + 1;
}
// 올바른 괄호 문자열 여부 체크
bool is_right_string(const string& s)
{
    int cnt = 0;
    for (const char &c : s)
    {
        if (c == '(')
            ++cnt;
        else
            --cnt;
        if (cnt < 0)
            return false;
    }
    return (cnt > 0) ? false : true;
}
bool make_balanced_string(const string& s, string& u, string& v)
{
    // 빈 문자열이 주어졌을 때
    if (s.size() == 0)
    {
        return false;
    }
    int v_strt = get_wrong_string_start(s);
    u = s.substr(0, v_strt);
    v = s.substr(v_strt);
    return true;
}
string make_right_string(const string &s)
{
    string u = "";
    string v = "";
    // 올바른 문자열 or 빈 문자열이 주어졌을 경우 : 입력 문자열 그대로 반환
    if (make_balanced_string(s, u, v) == false || is_right_string(s))
    {
        return s;
    }
    // u가 올바른 문자열O : u + v재귀 호출 결과 반환
    if (is_right_string(u))
    {
        return u + make_right_string(v);
    }
    // u가 올바른 문자열X : ( + v재귀 호출 결과 + ) + u의 앞뒤를 자르고 괄호 반전한 결과 반환
    return '(' + make_right_string(v) + ')' + make_reverse_except_ft(u);
}
string solution(string p) {
    return make_right_string(p);
}
이 무슨말이야... 싶을정도로 문제가 되게 안읽혔다
하지만 다 구현해놓고 보니, 오히려 문제는 그냥 코드를 문장으로 써놓았을 뿐이었다.
이제 한글보다 코드가 쉬운가보네 내가 껄껄
'Algorithm > 프로그래머스' 카테고리의 다른 글
| [프로그래머스]힙(Heap) : 라면공장 (level 2)(c++) (0) | 2020.05.14 | 
|---|---|
| [프로그래머스]힙(Heap) : 더 맵게(level 2) (c++) (0) | 2020.05.13 | 
| [프로그래머스]2017 카카오코드 예선 : 카카오프렌즈 컬러링북 (level 2)(c++) (0) | 2020.05.11 | 
| [프로그래머스]Summer/Winter Coding(~2018) : 스킬트리 (level 2) (c++) (0) | 2020.05.10 | 
| [프로그래머스]해시 : 전화번호 목록 (level 2) (c++) (0) | 2020.05.08 | 
 
										
									 
										
									
댓글