[프로그래머스 Level2] 올바른 괄호

Wonjun·2022년 8월 15일
0

알고리즘 & 문제풀이

목록 보기
19/50
post-thumbnail

📝 올바른 괄호

문제 설명

올바른 괄호

해결 방법

괄호 쌍이 맞으면 true를 return, 맞지 않으면 false를 return
false의 경우 '('만 남거나, ')'만 남는 경우, ")("와 같은 형태로 남는 경우이다. "()"쌍만 인정한다.
char형 stack st를 선언한다.
s[i]가 '('일 경우에만 stack에 push 한다.
s[i]가 ')'일 경우 stack이 비어있지 않다면 '('가 스택에 존재한다는 의미이므로()쌍 pop 한다.
s[i]가 ')'인데 stack이 비어있다면 더 이상 검사할 필요 없이 false를 return 한다.
for문 통과 후 스택이 비어있지 않으면 '('는 있는데 ')'는 없어서 쌍이 이루어지지 않으므로 false를 return 한다.

💻소스코드

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

using namespace std;

bool solution(string s)
{
    bool answer = true;
    stack<char> st;
    
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == '(')    // 스택에 '('만 push
            st.push(s[i]);
        else if (s[i] == ')' && !st.empty())    // 스택이 비어있지 않으면 '('가 있다는 의미
            st.pop();                           // 쌍이 맞았으므로 맨 위의 '(' 제거
        else if (s[i] == ')' && st.empty()) 
            return false;
    }
    if (!st.empty())    // for문 통과 후 stack이 비어있지 않으면 '('가 남았다는 의미
            return false;
    
    return answer;
}
profile
알고리즘

0개의 댓글