괄호

구해야 하는 것

  • 주어진 괄호 문자열이 VPS인지 판단하라

주어진 자료

  • VPS: 한 쌍의 괄호들로 구성된 문자열
  • 테스트 데이터 개수 = T

조건

  • 2 <= 하나의 괄호 문자열 길이 <= 50

계획

  1. '('는 스택에 넣는다.
  2. ')'를 만나면 스택에서 하나씩 꺼낸다.
  3. ')'를 만났는데 스택의 크기가 0이거나, 문자열을 끝까지 돌았는데 스택이 비어있지 않으면 VPS가 아님.

실행

public class Main {
    // 문자열이 VPS인지 체크
    public boolean chkVps(String s) {
        Stack<Character> stack = new Stack<>();
        
        for(int j = 0; j < s.length(); j++) {
            if(s.charAt(j) == '(') {
                stack.push(s.charAt(j));
            } else {
                if(stack.isEmpty()) { // ')'인데 스택이 비어있으면
                    return false;
                }
                stack.pop();
            }
        }
        
        if(!stack.isEmpty()) { // 문자열을 끝까지 돌았는데 스택이 비어있지 않으면
            return false;
        }
        return true;
    }
    
    public void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int t = Integer.parseInt(br.readLine());
        
        for(int i = 0; i < t; i++) {
            String s = br.readLine();

            if(chkVps(s)) { // VPS 체크
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }
        }
    }
    
    public static void main(String[] args) throws IOException {
        new Main().solution();
    }
}