Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

개발자 일기장.

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

취업/Algorithm.

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

Azderica 2020. 4. 11. 00:25

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

 


Problem?

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

프로그래머스

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

programmers.co.kr

 

Solution

문제구현문제

  • 문제에서 시키는대로 재귀함수 작성하는 문제.

Code

#include	<iostream>
#include	<string>
using namespace std;

// check 's' is balanced string
bool isCorrectBalanced(string s) {
	int lc = 0, rc = 0;
	for (int i = 0; i < s.length(); i++) {
		if (s[i] == '(')	// (
			lc++;
		else				// )
			rc++;
		if (lc < rc)		// not balanced
			return false;
	}
	return true;
}

// get balanced substr 
string getSubString(string s) {
	int lc = 0, rc = 0;
	for (int i = 0; i < s.length(); i++) {
		if (s[i] == '(')	// (
			lc++;
		else				// )
			rc++;
		if (lc == rc)		// if balanced
			break;
	}
	return s.substr(0, lc + rc);
}

// make correct & balanced String
string balancedString(string s) {
	string u = getSubString(s);
	string v = s.substr(u.length());
	if (s == "")
		return "";
	if (isCorrectBalanced(u))
		return (u + balancedString(v));
	else {
		string res = "";
		res += '(';
		res += balancedString(v);
		res += ')';
		string tu = u.substr(1, u.length() - 2);
		for (int i = 0; i < tu.length(); i++) {
			if (tu[i] == '(')
				tu[i] = ')';
			else
				tu[i] = '(';
		}
		res += tu;
		return res;
	}
}

string solution(string p) {
	if (p == "")
		return "";
	return balancedString(p);
}

int main() {
	cout << solution("(()())()") << "\n";
	cout << solution(")(") << "\n";
	cout << solution("()))((()") << "\n";

	return 0;
}

 


  • 구현 문제

 

'취업 > Algorithm.' 카테고리의 다른 글

백준 14888. 연산자 끼워넣기  (0) 2020.05.02
백준 2573. 빙산  (0) 2020.05.01
백준 17837. 새로운 게임2  (0) 2020.04.11
백준 17140. 이차원배열과 연산  (0) 2020.04.11
백준 15684. 사다리 조작  (0) 2020.04.11