본문 바로가기
Coding Test/Programmers

[Programmers] (2020 KAKAO BLIND RECRUITMENT) Lv 2. 괄호 변환

by song.ift 2023. 8. 7.

https://school.programmers.co.kr/learn/courses/30/lessons/60058

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

#include <string>
#include <vector>

using namespace std;

// 문자열을 분리해서 u를 균형잡힌 문자열로, 나머지를 v로 뱉어주는 함수
void Balance(const string& p, string& outputU, string& outputV)
{
    size_t open{ 0 }, close{ 0 };

    for (size_t i = 0; i < p.length(); ++i)
    {
        p[i] == '(' ? ++open : ++close;
        if (close == open)
        {
            outputU = p.substr(0, i + 1);
            outputV = p.substr(i + 1);
            return;
        }
    }

    outputU = p;
    outputV = "";
}

// 올바른 괄호 문자열인지 체크해주는 함수
bool IsCorrect(const string& p)
{
    size_t open{ 0 }, close{ 0 };

    for (size_t i = 0; i < p.length(); ++i)
    {
        p[i] == '(' ? ++open : ++close;
        if (close > open) return false;
    }
    
    return true;
}

// 첫 번째와 마지막 문자를 제외한 괄호를 거꾸로 뒤집어주는 함수
string Reverse(string p)
{
    string res = "";
    for (size_t i = 1; i < p.length() - 1; ++i)
        res += (p[i] == '(') ? ')' : '(';

    return res;
}

string Convert(string p)
{
    if (p.empty()) return "";

    string u, v;
    Balance(p, u, v);

    if (!IsCorrect(u)) return '(' + Convert(v) + ')' + Reverse(u);
    else return u + Convert(v);
}

string solution(string p) {
    return Convert(p);
}

GitHub : https://github.com/developeSHG/Algorithm-Baekjoon_Programmers/commit/9c3d44ba940d59029f25266c30722629dc02ee2b

 

[level 2] Title: 괄호 변환, Time: 0.03 ms, Memory: 4.13 MB -BaekjoonHub · developeSHG/Algorithm-Baekjoon_Programmers@9c3d44

developeSHG committed Aug 7, 2023

github.com

 

댓글