2020 카카오 - 괄호변환

phoenixKim·2021년 9월 7일
0

카카오 기출문제

목록 보기
15/24

풀이전략

: 3번 예제를 보고 왜 이렇게 해야하지 생각이 들지만, 시키는 대로 그대로 하면된다.
4-1 ~ 4-3번 부분에 대한 의구심이 생기지만, 시키는 대로만 하자!

  • break; 가 중요하다.
    cnt가 0이 되는 순간 반환할 값에 대한 처리를 재귀를 통해 이미 다했으므로
    break를 통해 반복문을 끝마쳐야 한다.

소스코드

#include <string>
#include <vector>

using namespace std;

string solution(string p) {
    string answer = "";
    if(p.empty())
        return p;
    
    string u = "";
    
    //v는 빈문자열이 될수 잇다.
    string v = "";
    int cnt = 0;
    for(int i = 0; i < p.length(); i++)
    {
        if(p[i] == '(')
        {
            cnt++;
        }
        else
        {
            cnt--;
        }
        
        //올바른인지, 균형 잡힌지 구분해야 한다. u가
        if(cnt == 0)
        {
            u = p.substr(0, i + 1);
            v = p.substr(i + 1);
            
            
            //올바른 일 경우
            if(p[0] == '(')
            {
                answer = u + solution(v);
            }
            //균형 잡힌 일 경우
            else
            {
                answer = '('+ solution(v) + ')';
                
                for(int j = 1; j < u.length() - 1; j++)
                {
                    if(u[j] == '(')
                        answer += ')';
                    else 
                        answer += '(';
                }
                         
            }
            
            break;
        }
             
    }
    
    
    
    return answer;
}
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보