프로그래머스 - 올바른 괄호

well-life-gm·2021년 11월 5일
0

프로그래머스

목록 보기
27/125

프로그래머스 - 올바른 괄호

널리 알려진 괄호 문제이다.
()() 이런 문자열은 올바른 괄호이고, (())) 이런 문자열은 잘못된 괄호이다.

문자열을 0부터 돌면서 ')'를 만나면 스택의 top을 확인하고 '('이라면 pop, 아니라면 push해주면 된다. (empty면 false를 리턴해주면 된다.)
'('라면 스택에 push해주면 된다.

스택의 크기가 문자열의 절반을 넘으면 더 이상 체크할 필요가 없이 잘못된 문자열이라 최적화 시도를 했는데, 결과엔 큰 차이가 없다. (아마도 테케에 그런게 없는 듯 하다)

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

using namespace std;


bool solution(string s)
{
    bool answer = true;
    
    stack<char> st;
    
    int idx = 0;
    while(1) {
        if(idx == s.size())
            break;
        //최적화 시도...
        if(st.size() > s.size() / 2) 
            break;
        char c = s[idx];
        if(c == ')') {
            if(st.empty())
                return false;
            if(st.top() == '(')
                st.pop();
            else 
                st.push(c);
        } else 
            st.push(c);
        idx++;
    }
    
    if(!st.empty())
        answer = false;
    
    return answer;
}

최적화 시도 안했을 때 결과
사진1

최적화 시도 했을 때 결과
사진2

profile
내가 보려고 만든 블로그

0개의 댓글