본문 바로가기
Algorithm/leetcode

[leetcode] Valid Parentheses(유효한 괄호)

by 세류오 2023. 8. 16.

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

 

Valid Parentheses - LeetCode

Can you solve this real interview question? Valid Parentheses - 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 sam

leetcode.com

 

 

 

조건

1. 여는괄호는 반드시 같은 타입의 괄호로 닫혀야한다

2. 여는 괄호는 반드시 올바른 순서대로 닫혀야 한다.

3. 모든 닫는 괄호는 여는 괄호와 같은 타입이여야 한다.

 

예시

Example 1:

Input: s = "()"

Output: true

 

Example 2:

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

Output: true

 

Example 3:

Input s = "(]"

Output: false

 

 

import java.util.*;
class Solution {
    boolean isValid(String s) {

    Stack<Character> stack = new Stack<>();//char형 스택
	
    //매개변수 String 반복
    for (int i = 0; i < s.length(); i++) {
      //여는괄호가 우선 들어오는지 확인
      if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') {
        stack.push(s.charAt(i));
      } else {
            //여는괄호가 먼저 들어오지 않았다 -> false
            if(stack.isEmpty()){
                return false;
            }
			//여는괄호에 맞춰 닫는괄호확인
            if(stack.peek() == '(' && s.charAt(i) == ')' 
            || stack.peek() == '{' && s.charAt(i) == '}' 
            || stack.peek() == '[' && s.charAt(i) == ']') 
            {
                //일치한다면 pop()
                stack.pop();
                } else {
                    //틀릴 시 false
                    return false;
                }
        }
    }   
        //stack이 비어있다면 올바른 괄호
        return stack.isEmpty();
    }
}