본문 바로가기

Algorithm

[Algorithm/Java][LeetCode] 20. Valid Parentheses

반응형

[LeetCode] 20. Valid Parentheses

https://leetcode.com/problems/valid-parentheses/

문제접근

괄호가 올바른 괄호인지 잘 닫히고 열렸는지를 확인하는 문제이다. 비슷한(똑같은) 문제를 백준에서 풀어봐서 Stack을 이용하면 된다는 것을 알고 있었다.
여는 괄호일 때는 Stack에 push를 해주고 닫힌 괄호일 때는 Stack에 top이 같은 종류의 괄호인지 확인하고 pop하거나 아니라면 false를 리턴해준다.
이때 예외처리할 상황은 2가지이다.

  1. 열린 괄호로만 이루어져있을때.
  2. 닫힌 괄호로만 이루어져있을때.
    1번처럼 열린 괄호로만 이루어져있다면 for문을 빠져나왔을 때 Stack이 비어있지 않을 것이고, 2번처럼 닫힌 괄호로만 이루어져 있다면 switch문 안에서 스택이 비어있을 것이다.

Code

import java.util.Stack;

class Solution {
    public boolean isValid(String s) {
        Stack<Character> st = new Stack<>();
        for(int i=0; i<s.length(); i++){
            char cur = s.charAt(i);
            char top;
            switch(cur){
                case '(':
                case '{':
                case '[':
                    st.push(cur);
                    break;
                case ')':
                    if(st.isEmpty())
                        return false;
                    top = st.pop();
                    if(top !='('){
                        return false;
                    }
                    break;
                case '}':
                    if(st.isEmpty())
                        return false;
                    top = st.pop();
                    if(top !='{'){
                        return false;
                    }
                    break;
                case ']':
                    if(st.isEmpty())
                        return false;
                    top = st.pop();
                    if(top !='['){
                        return false;
                    }
                    break;
            }
        }
        return st.isEmpty();
    }
}

어려웠던 점/ 배운 점

옛날에 한번 풀어봤던 문제라서 어려움없이 접근하고 풀었던 것 같다.

반응형