알고리즘/프로그래머스
프로그래머스 - 괄호 변환
시나모온
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
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~