본문 바로가기
Problem solving/LeetCode

[LeetCode] 20. Valid Parentheses (C++)

by 겸 2023. 6. 30.

문제

괄호들이 주어질 때 괄호 구문이 올바른지 여부

생각할 것

자주 나오는 유형의 문제로 나는 항상 스택을 활용했다!

한 방향의 괄호를 넣고 반대 방향의 괄호가 나올 때 스택에서 가장 위에 있는 값을 비교하며 없앤다.

마지막에 스택이 비어있는 경우에만 유효한 구문이다.

코드

class Solution {
public:
    bool isValid(string s) {
        stack<char> st;
        for(int i=0; i<s.size(); i++){
            if(s[i] == '(' || s[i] == '{' || s[i] == '['){
                st.push(s[i]);
            } else {
                if(!st.empty()){
                    if(st.top() == '(' && s[i] == ')'){
                        st.pop();
                    } else if(st.top() == '{' && s[i] == '}') {
                        st.pop();
                    } else if(st.top() == '[' && s[i] == ']') {
                        st.pop();
                    }
                    else {
                        return false;
                    }
                }
                else{
                    return false;
                }
            }
        }

        if(!st.empty()){
            return false;
        }
        else {
            return true;
        }
    }
};
반응형