쌓고 쌓다
[프로그래머스] 괄호 변환 C++ 풀이 본문
https://school.programmers.co.kr/learn/courses/30/lessons/60058?language=cpp
전체 코드
#include <string>
#include <vector>
#include <stack>
using namespace std;
string solution(string p) {
string answer = "";
//1단계
if(p=="")
return p;
//2단계
int lcnt=0,rcnt=0;
string u,v;
for(int i=0;i<p.length();i++)
{
u+=p[i];
if(p[i]=='(')
lcnt++;
else
rcnt++;
if(lcnt==rcnt)
{
for(int j=i+1;j<p.length();j++)
v+=p[j];
break;
}
}
// 3단계-올바른 괄호 판단
stack<char> s;
bool flag=true;
for(int i=0;i<u.length();i++)
{
if(u[i]=='(')
s.push(u[i]);
else
{
if(!s.empty())
s.pop();
else
{
flag=false;
break;
}
}
}
// 3단계
if(flag&&s.empty())
{
u+=solution(v);
return u;
}
else // 4단계
{
string str="(";
str+=solution(v);
str+=")";
u.erase(u.begin());
u.erase(u.end()-1);
for(int i=0;i<u.length();i++)
{
if(u[i]=='(')
str+=")";
else
str+="(";
}
return str;
}
return answer;
}
그냥 아래의 지문에 요구하는대로 구현하면 되는데 올바른 괄호 문자열 판단하는 알고리즘을 알아야 한다.
올바른 괄호 문자열인지 판단하는 방법은 stack을 이용해하면 된다.
참고 링크
https://non-stop.tistory.com/90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 거리두기 확인하기 C++ 풀이 (0) | 2022.07.31 |
---|---|
[프로그래머스] 뉴스 클러스터링 C++ 풀이 (0) | 2022.07.28 |
[프로그래머스] 메뉴 리뉴얼 C++ 풀이 (0) | 2022.07.21 |
[프로그래머스] 행렬 테두리 회전하기 C++ 풀이 (0) | 2022.07.20 |
[프로그래머스] 짝지어 제거하기 C++ 풀이 (0) | 2022.07.18 |
Comments