본문 바로가기

카테고리 없음

[LeetCode] Valid Parentheses | 난이도: Easy

반응형

문제

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

예시

Input: s = "()"
Output: true

Input: s = "()[]{}"
Output: true

Input: s = "([)]"
Output: false

Input: s = "{[]}"
Output: true

제약조건

  • 1 <= s.length <= 104
  • s consists of parentheses only '()[]{}'.

답안

class Solution {
    public boolean isValid(String s) {
        
        Stack<Character> stack = new Stack<Character>();
        
        for(char brckt : s.toCharArray()){
            if(brckt == '('){
                stack.push(')'); 
            }
            else if(brckt == '{'){
                stack.push('}');
            }
            else if(brckt == '['){
                stack.push(']');
            }
            else if(stack.isEmpty() || stack.pop() != brckt){
                return false;
            }
        }
        return stack.isEmpty();
    }
}

 

Stack 자료구조를 활용한다.

Stack은 일방향으로 데이터 삽입과 추출이 가능하다. 이를 LIFO(Last In First Out)이라 부르기도 한다.

만약 본인이 1,2,3 이라는 값을 순서대로 Stack에 할당했다면, 가장 마지막에 넣은 3 이라는 값에만 접근 가능하다.

 

배열의 값을 단순 비교 후 괄호의 짝이 맞으면 Stack에 넣는다.

for문 사용 시 인덱스를 활용할 일이 없기 때문에 확장 for문을 사용한다.

stack.pop() != brckt 코드를 통해 Stack안의 괄호가 서로 다른 경우 false를 리턴하도록 한다.

마지막으로 stack.isEmpty() 코드를 통해 Stack이 비어있는 여부를 boolean 값을 리턴하도록 한다.

반응형