티스토리 뷰

문제 링크

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 콘은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴�

programmers.co.kr

 

풀이

풀이 순서를 주었기 때문에 해당 solution함수를 재귀 함수로 주어진 풀이대로 수행하였다.

풀이를 주니까 따라서 하기만 했더니 바로 성공

 

 

더보기
#include <string>
#include <vector>
#include <iostream>
#include <string>

using namespace std;

string solution(string p) {
    string u = "";
    string v = "";
    
    // 빈 문자열 검사
    if(p.length()==0)
    {
        return "";
    }
    else
    {
        // 균형잡힌 괄호 문자열 검사
        int index = 0, gradient = 0;
        do
        {
            if(p[index] == '(') gradient++;
            else if(p[index] == ')') gradient--;
            if(gradient==0){break;}
            index++;
        }while(index<p.length());
        
        // u 할당
        u = p.substr(0, index+1);
        // v 할당
        v = p.substr(index+1);
        
        // 올바른 괄호 문자열 검사
        gradient = 0;
        for(int i=0; i<u.length(); i++)
        {
            if(u[i]=='(') gradient++;
            else if(u[i]==')') gradient--;

            if(gradient < 0) break;
        }
        if(gradient==0) // 올바르다
        {
            return u + solution(v);
        }
        else
        {
            u.erase(u.begin());
            u.pop_back();
            for(int i=0; i<u.length(); i++)
            {
                if(u[i]=='(') u[i] = ')';
                else if(u[i]==')') u[i] = '(';
            }
            return "(" + solution(v) + ")" + u;
        }
    }
}
728x90
반응형
댓글
05-08 03:22
링크