알고리즘/프로그래머스

프로그래머스 - 괄호 변환

시나모온 2020. 9. 7. 23:40

문제 링크입니다 : programmers.co.kr/learn/courses/30/lessons/60058

 

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

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

programmers.co.kr

 

괄호 문제는 무조건 스택이다!

 

문제 주어진 대로 구현했다.

 

 

 

 

#include <string>
#include <vector>
#include <stack>
#include <iostream>
#include <algorithm>

using namespace std;

bool isBalanced(string str) {
    int left = 0;
    int right = 0;
    for(int i = 0; i < str.size(); i++) {
        if(str[i] == '(') {
            left++;
        } else {
            right++;
        }
    }
    
    return left == right;
}

bool isRight(string str) {
    stack<char> s;
    for(int i = 0; i < str.size(); i++) {
        if(str[i] == '(') {
            s.push('(');
        } else if(s.empty()) {
            return false;
        } else {
            s.pop();
        }
    }
    
    return s.size() == 0;
}

string getRightString(string w) {
    if(w == "") return "";
    
    int index = 0;
    int left = 0;
    int right = 0;
    for(int i = 0; i < w.size(); i++) {
        if(w[i] == '(') {
            left++;
        } else {
            right++;
        }
        if(left == right) {
            index = i;
            break;
        }
    }
    
    string u =  w.substr(0, index + 1);
    string v = w.substr(index + 1);
    
    if(isRight(u)) {
        u += getRightString(v);
    } else {
        string temp = u.substr(1, u.size() - 2);
        for(int i = 0; i < temp.size(); i++) {
            if(temp[i] == '(') {
                temp[i] = ')';
            } else {
                temp[i] = '(';
            }
        }
        u = "(" + getRightString(v) + ")" + temp;
    }
    
    
    return u;
}


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

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~