괄호

문제 풀러가기

9012

코드

import java.util.*;
import java.io.*;

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int n = Integer.parseInt(br.readLine());

    while(n-- > 0) {
      boolean isVPS = true;
      String str = br.readLine();

      Stack<Character> stack = new Stack<Character>();

      for(int i = 0; i < str.length(); i++) {
        char tmp = str.charAt(i);

        if(tmp == '(') {
          stack.push(tmp);
        } else if(tmp == ')') {
          if(!stack.isEmpty())
            stack.pop();
          else {
            isVPS = false;
            break;
          }
        }
      }

      if(!stack.isEmpty())
        isVPS = false;

      if(isVPS)
        System.out.println("YES");
      else
        System.out.println("NO");
    }
  }
}

설명

문자열로 괄호를 입력받은 다음 (인지 확인한 후 맞으면 스택에 집어 넣는다. 그리고 다음에 오는 )를 확인하고 스택을 제거하거나 VPS의 참거짓 여부를 적용한다. 문자열을 다 검사하면서 괄호가 성립할 경우 스택에서 제거하기 떄문에 VPS인 경우 반복문 종료 이후에 스택이 비어 있어야 한다. 스택이 비어있지 않다면 VPS가 아니다.