프로그래머스 Lv.2 코딩테스트

[프로그래머스 Lv.2] 올바른 괄호

하다블 2022. 9. 8. 18:21
반응형

문제는 다음과 같습니다.

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

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

programmers.co.kr

 

풀이 코드는 다음과 같습니다.

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

bool solution(string s)
{
    bool answer = true;
    stack<int>st;

    if(s[0]==')'||s[s.size()-1]=='(')
    {
        answer = false;
        return answer;
    }
    else
    {
        for(int i{0};i<s.size();i++)
        {
            if(s[i]==')')
            {
                if(st.empty())
                {
                    answer =false;
                    return answer;
                }
                else
                {
                    st.pop();
                }
            }
            else if(s[i]=='(')
            {
                st.push(1);
            }
        }
        
    }
    if(!st.empty())
    {
        answer=false;
    }

    return answer;
}

가장 기본적인 스텍(stack) 또는 큐(queue) 문제라고 생각됩니다.

짝을 맞추어야하는 부분을 간단하게 해결할 수 있기 때문입니다. 

stack에는 꼭 "(" , ")"를 넣을 필요 없이 코드처럼 숫자를 넣어도 무관합니다. 그 이유는 우리의 관심사는 "괄호가 올바르게 짝지어져있는가?"이기 때문에 stack에 뭘 넣었는지 관심없기 때문입니다.

여는 괄호 " ( " 를 받으면 stack에 하나를 추가하고 닫는 괄호 " ) " 를 받으면 stack에서 하나를 빼는 과정을 통해 문제를 해결 할 수 있고 처음부터 닫는 괄호 " ) "가 나오거나 맨 마지막에 여는 괄호 " ( "가 나오면 그 사이에 어떤 괄호가 나오든 짝이 맞지 않으므로 마로 false를 return 해줍니다.

같은 이유로 닫는 괄호 " ) "가 나왔는데 stack이 비어있으면 이미 올바르게 괄호가 지어지지 않았으므로 false를 출력하면 되며, 모든 문자열을 다 읽었는데 stack이 비어있지 않으면 여는 괄호 " ( "가 더 많다는 뜻이므로 false를 출력하면 됩니다.

반응형