Programmers/Level 2

C++ / 프로그래머스 / 올바른 괄호

GitHubSeob 2023. 6. 26. 23:00

문제

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

 

프로그래머스

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

programmers.co.kr

문제풀이

백준에서 풀었던 문제와 같다

스택을 이용하면 간단하게 풀 수 있다.

 

1. 스택이 비어있을 때 첫 괄호가 ')' 일 때

이 경우는 무조건 짝지을 수 없으므로 바로 return을 하면 된다.

 

2. 괄호가 '('일 때

괄호를 닫을 수 없으므로 스택에 push 한다.

 

3. 스택이 비어있지 않고, 괄호가 ')' 일 때

스택에는 무조건 이 경우에 의해서 무조건 스택에는 '('만 들어가 있다.

따라서 pop을 하여 스택을 한 칸 비워주기만 하면 된다.

 

for문이 끝났을 때, 스택이 비어있다면 올바르지 않은 괄호이므로 false를,

스택이 비어있다면 true를 return 한다.

 

코드

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

bool solution(string s)
{
    bool answer(true);
    stack<char>st;
    int idx(0);
    for (idx = 0; idx < s.size(); ++idx) {
        if (st.empty() && s[idx] == ')') {
            return false;
        }
        else if (s[idx] == '(') {
            st.push('(');
        }
        else if (s[idx] == ')') {
            st.pop();
        }
    }
    if (st.empty())
        return true;
    else return false;
}