문제 설명

'(' 또는 ')'로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호인지 아닌지 return

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

 

프로그래머스

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

programmers.co.kr

 

문제 풀이법

스택을 사용하여 풀 수 있는 문제이다

 

문자열을 돌면서 문자가 '('이면  스택에 push한다

 

')'이면 pop하는데, 우선 스택이 비어있는지 아닌지 검사한다

스택이 비어있으면 pop을 할 수 없으므로 바로 break 후 false를 return한다

스택이 비어있지 않지만 맨 위의 값이 ')'이면 괄호가 해당 문자열은 올바르게 짝지어지지 않았다는 것이므로 바로 break 후 false를 return 한다

 

문자열을 다 돈 후에 스택에 값이 남아있다면, 이 또한 해당 문자열이 올바르게 짝지어지지 않았다는 것이므로 false를 return 한다 

 

소스 코드

#include <string>
#include <iostream>
#include <stack>

using namespace std;

bool solution(string s)
{
    bool answer = true;

    stack<char> st;

    for (char c : s) {
        if (c == '(')
            st.push('(');
        else
        {
            if (st.empty()) {
                answer = false;
                break ;
            }
            else if (st.top() == ')')
            {
                answer = false;
                break ;
            }
            else
                st.pop();
        }
    }

    if (!st.empty())
        answer = false;
    
    return answer;
}
복사했습니다!