쌓고 쌓다

[프로그래머스] 괄호 변환 C++ 풀이 본문

알고리즘/프로그래머스

[프로그래머스] 괄호 변환 C++ 풀이

승민아 2022. 7. 26. 02:37

https://school.programmers.co.kr/learn/courses/30/lessons/60058?language=cpp 

 

프로그래머스

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

programmers.co.kr

 

전체 코드

#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

 

올바른 괄호 판별 - 스택 활용

[(()){}{}] 와 같은 괄호가 있다. 이 괄호가 올바른지 확인하는 방법으로 스택을 사용한다. 여는 괄호는 스택에 그냥 넣어주면 된다. 닫는 괄호에서는 스택을 열어봐서 비교해봐야 한다. 현재 닫는

non-stop.tistory.com

Comments