https://programmers.co.kr/learn/courses/30/lessons/60058
문자열을 이용한 구현 문제이다. 문제만 제대로 이해하고 재귀함수를 통해 그대로 구현하면 된다.
#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;
bool check(string p) { //올바른 괄호 문자열 체크
stack<int> s;
for (int i = 0; i < p.size(); i++){
if (p[i] == '(') s.push(1);
else {
if (s.empty()) return false;
else s.pop();
}
}
return true;
}
string solution(string p) {
if (p=="" || check(p)) return p;
int L = 0, R = 0;
string u, v;
for (int i = 0; i < p.size(); i++) { //u를 균형잡인 괄호 문자열로 세팅
if (p[i] == '(') L++;
else R++;
if (L == R) {
u = p.substr(0, i + 1);
v = p.substr(i + 1);
break;
}
}
if (check(u)) return u + solution(v); //u가 올바른 괄호인경우
else {
string temp = "(" + solution(v) + ")";
for (int i = 1; i < u.size() - 1; i++) { //u의 양끝을 뺀 문자열 뒤집어서 넣기
if (u[i] == '(') temp += ')';
else temp += '(';
}
return temp;
}
}
int main() {
cout << solution("()))((()") << endl;
}
'Algorithm > 구현' 카테고리의 다른 글
[백준] 11005번 : 진법 변환 2 (C++, JAVA) (0) | 2021.09.21 |
---|---|
[백준] 17837번 : 새로운 게임 2 (C++) (삼성 SW 역량테스트) (0) | 2021.09.19 |
[백준] 10250번 : ACM 호텔 (0) | 2021.09.02 |
[백준] 14503번 : 로봇 청소기 (C++) (삼성 SW역량 기출) (0) | 2021.08.30 |
[백준] 15685번 : 드래곤 커브 (C++) (0) | 2021.08.29 |
댓글