기록공간

올바른 괄호 (프로그래머스) 본문

Algorithm/문제

올바른 괄호 (프로그래머스)

입코딩 2020. 6. 12. 21:37
반응형

스택을 알고 있다면 어렵지 않게 풀 수 있는 문제였다.

 

스택을 이용하여 입력받은 괄호정보를 순회하며 '('를 만나면 그 값은 스택에 집어넣는다. 만약 ')'를 만나면 스택에서 '(' 하나를 꺼낸다. 모든 작업을 마치고 만약 스택이 비어 있다면 그것은 올바른 괄호이므로 true를 반환하면 된다.

 

하지만 주의할 점이 있는데 처음부터 ')'이 나오는 경우이다. 이 경우 '('를 스택에서 꺼내고 싶어도 스택이 비어 있어 꺼낼 수 없으므로 바로 false를 반환하면 된다. 

 

코드는 다음과 같다.

#include<string>
#include<stack>
using namespace std;
bool solution(string s)
{
    bool answer = false;
    stack<char> v;
    for(const auto& iter : s)
    {
        if(iter == '(') v.push(iter); // '('를 만나면 스택에 넣는다.
        else if(!v.empty()) v.pop();  // ')'를 만나면 스택에서 '('하나를 지운다.
        else return answer;           // 스택이 비어 있는 상태이므로 이것은 올바르지 않은 괄호이다.
        
    }
    if(v.empty()) answer = true; // 스택이 비어 있다면 올바른 괄호이다.
    
    return answer;
}

 

반응형
Comments