본문 바로가기

Algorithm/프로그래머스

[2020카카오공채] 괄호 변환

 

https://programmers.co.kr/learn/courses/30/lessons/60058

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#include <string>
#include <vector>
#include <stack>

using namespace std;

string solution(string p) {
	string answer = "";

	if (p == "") return answer;

	int i;
	int left = 0, right = 0;

	for (i = 0; i < p.length(); i++) {
		if (p[i] == '(') left++;
		else right++;
		if (left == right) break;
	}
	i++;
	string u = p.substr(0, i);
	string v = p.substr(i, string::npos);

	stack<char> st;
	bool isCorrect = true;
	for (int i = 0; i < u.length(); i++) {
		if (u[i] == '(') st.push(u[i]);
		else {
			if (st.empty()) {
				isCorrect = false;
				break;
			}
			else st.pop();
		}
	}
	if (!st.empty()) isCorrect = false;

	if (isCorrect) {
		answer += u + solution(v);
	}
	else {
		answer += "(" + solution(v) + ")";
		for (int i = 1; i < u.length() - 1; i++) {
			if (u[i] == '(') answer += ")";
			else answer += "(";
		}
	}

	return answer;
}