[LeetCode] Valid Parentheses

아르당·2024년 11월 20일

LeetCode

목록 보기
6/68
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

주어진 문자열 s는 오직 '(', ')', '{', '}', '[', ']' 문자들만 포함하고 있고, 입력된 문자열이 유효한지 결정해라.
입력된 문자열이 유효한 조건이다.

  1. 열림 괄호는 같은 타입의 괄호로 닫혀야한다.
  2. 열림 괄호는 올바른 순서로 괄호가 닫혀야한다.
  3. 모든 닫힘 괄호는 같은 타입의 열림 괄호와 일치해야한다.

Example

#1
Input: s = "()"
Output: true

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

#3
Input: s = "(]"
Output: false

#4
Input: s = "([])"
Output: true

Constraints

  • 1 <= s.length <= 10^4
  • s는 오직 '()[]{}' 괄호만 존재한다.

Solved

스택을 사용하면 문제를 쉽게 해결할 수 있다. 반복문을 통해 열림 괄호를 만나면 스택에 담고 닫힘 괄호를 만나면 스택에서 같은 타입인 열림괄호인지 확인하고 스택에서 빼주면 된다. 그리고 스택이 비어있는지 여부를 반환하면 된다.

All Code

public class Solution {
  public boolean isValid(String s) {
    Stack<Character> stack = new Stack<>();
    char[] va = s.toCharArray();

    for (char c : va) {
      if(stack.isEmpty()) {
        stack.push(c);
      } else if (c == ')' && stack.peek() == '(') {
        stack.pop();
      } else if (c == ']' && stack.peek() == '[') {
        stack.pop();
      } else if (c == '}' && stack.peek() == '{') {
        stack.pop();
      } else {
        stack.push(c);
      }
    }

    return stack.isEmpty();
  }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글