프로그래머스 - 괄호 변환 - Level 2

Byungwoong An·2021년 7월 2일
0

문제


풀이전략

  1. 문제가 상당히 친절하게 재귀를 사용하라고, 어떻게 구현하라고 가르쳐주었다.
  2. substr을 활용하여 u와 v로 잘라서 문제를 해결하면 된다.

코드

#include <string>
#include <vector>

using namespace std;

string getMyString(string s){
	// 비어있는 문자열은 그냥 return
    if(s.length() == 0) return "";
    int flag = true;
    int key = 0;

    string u = "", v= "";
    int i = 0;
    
    while(key != 0 || i == 0){
        if(s[i] == '('){
            key++;
        }
        else if(s[i] == ')'){
            key--;
        }
        if(key < 0) flag = false;
        u += s[i];
        i++;
    }
    v = s.substr(i);
    // u가 올바른 괄호 문자열일 경우
    if(flag) return u + getMyString(v);
    // u가 균형잡힌일 경우
    else{
    // 문제에서 하라는 4번대로 해결
        string tmp ="";
        tmp += '(';
        tmp += getMyString(v);
        tmp += ')';
        string newU = u.substr(1, u.length()-2);
        for(int j =0; j<newU.length(); j++){
            if(newU[j] == '(') newU[j] = ')';
            else if(newU[j] == ')') newU[j] = '(';
        }
        return tmp + newU;
    }
}

string solution(string p) {
    string answer = "";
    answer = getMyString(p);
    return answer;
}

소감

문제에서 풀라는 대로 풀었다. 단 이렇게 구현을 할 수 있다는 것을 알고 이 과정을 따라 잘 할수 있어야한다.

profile
No Pain No Gain

0개의 댓글