문제 정의

괄호가 문자열로 주어질 때, 해당 괄호가 올바른 괄호인지 판단하는 함수를 만드세요.

입력

(())()

출력

"YES"

문제접근

  1. 문자열을 차례로 읽어가면서 왼쪽 괄호를 만날경우 스택에 넣어준다.
  2. 오른쪽 닫는 괄호를 만날 경우 스택에서 아이템을 하나 빼준다.

2-1. 이때, 스택이 비어있다면 오른쪽 괄호에 맞는 왼쪽괄호가 없다는 뜻. "NO"를 리턴한다.

  1. 위 과정을 문자열의 길이만큼 수행했을 때, 스택이 비어있지 않다면 좌측 괄호가 많다는 뜻으로 "NO"를 리턴한다.

3-1. 스택이 비어있다면, 올바른 괄호

구현(JAVA)

public static String solution(char[] arr) {
    String answer = "YES";
    Stack<Character> stack = new Stack<>();
    for (char x : arr) {
      if (x == '(') stack.push(x);
      else {
        if (stack.isEmpty()) return "NO";
        stack.pop();
      }
    }
    if (!stack.isEmpty()) return "NO";
    return answer;
  }
}