반응형
문제를 잘 이해하고 재귀 및 stack을 잘 활용해야한다.
이 문제는 어떻게 괄호를 변환하는지 설명이 잘 되어있다.
그렇기 때문에 문제를 차근차근 읽어보고 재귀가 어떻게 돌아갈지 이해하도록 노력해야 한다.
다음 입출력 예제를 통해서 문제에서 설명한대로 괄호를 변환해서 만들어보면 어떻게 하라는건지 이해될거다.
실수할 수 있는 부분은
4-4 괄호 방향을 뒤집으라는 것이지 순서를 바꾸라는 것이 아니다
#include <string>
#include <vector>
#include <iostream>
#include <stack>
#include <algorithm>
using namespace std;
string answer = "";
string split (string s){
if(!s.size())return s;
vector <int> x(2,0); int index =0;
for(int i=0; i<s.size(); i++){
if(s[i]=='(')x[0]++;
else if(s[i]==')')x[1]++;
if(x[0]==x[1]&&x[0]!=0){
index=i;
break;
}
}
stack <int> st;
string v ="";
string u = s.substr(0,index+1);
if(s.size()!=index+1) v = s.substr(index+1);
else v="";
for(int i=0; i<u.size(); i++){
if(st.empty())st.push(u[i]);
else if (st.top()=='('&&u[i]==')') st.pop();
else st.push(u[i]);
}
if(st.empty()) return u += split(v);
else{
string temp = "(";
temp+=split(v);
temp+=")";
if(u.size()>2){
u=u.substr(1,u.size()-2);
for(int i=0; i<u.size(); i++){
if(u[i]=='(')u[i]=')';
else u[i]='(';
}
}
else u="";
return temp+=u;
}
}
string solution(string p) {
answer = split(p);
return answer;
}
반응형
'프로그래머스 > Level_2' 카테고리의 다른 글
[프로그래머스 Level_2 / C++ / 카카오] [3차] n진수 게임 (0) | 2022.02.18 |
---|---|
[프로그래머스 Level_2 / C++ / 카카오] 방금그곡 (0) | 2022.02.17 |
[Level_2 / C++ / 카카오] 메뉴 리뉴얼 (0) | 2022.01.28 |
[Level_2 / C++ / 카카오] k진수에서 소수 개수 구하기 (0) | 2022.01.25 |
[Level_2 / C++ / 카카오] 문자열 압축 (0) | 2022.01.24 |
댓글