프로그래머스/Level_2

[Level_2 / C++ / 카카오] 괄호 변환

배발자 2022. 1. 29.
반응형

문제를 잘 이해하고 재귀 및 stack을 잘 활용해야한다. 

 

이 문제는 어떻게 괄호를 변환하는지 설명이 잘 되어있다. 

그렇기 때문에 문제를 차근차근 읽어보고 재귀가 어떻게 돌아갈지 이해하도록 노력해야 한다. 

다음 입출력 예제를 통해서 문제에서 설명한대로 괄호를 변환해서 만들어보면 어떻게 하라는건지 이해될거다. 

 

 

실수할 수 있는 부분은

4-4 괄호 방향을 뒤집으라는 것이지 순서를 바꾸라는 것이 아니다

#include <string>
#include <vector>
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
string answer = "";
string split (string s){    
    if(!s.size())return s; 
    vector <int> x(2,0); int index =0;  
    for(int i=0; i<s.size(); i++){
        if(s[i]=='(')x[0]++; 
        else if(s[i]==')')x[1]++; 
        if(x[0]==x[1]&&x[0]!=0){
            index=i; 
            break; 
        }
    }
    stack <int> st; 
    string v ="";
    string u = s.substr(0,index+1); 
    if(s.size()!=index+1) v = s.substr(index+1); 
    else v=""; 
    
    for(int i=0; i<u.size(); i++){
        if(st.empty())st.push(u[i]); 
        else if (st.top()=='('&&u[i]==')') st.pop(); 
        else st.push(u[i]);     
    }
    if(st.empty()) return u += split(v); 
    else{
        string temp = "(";
        temp+=split(v); 
        temp+=")"; 
        if(u.size()>2){
            u=u.substr(1,u.size()-2);
            for(int i=0; i<u.size(); i++){
                if(u[i]=='(')u[i]=')'; 
                else u[i]='('; 
            }
        }
        else u=""; 
        return temp+=u; 
    }
}


string solution(string p) {   
    answer = split(p);     
    return answer;
}
 

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

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

programmers.co.kr

 

반응형

댓글