문제 설명 이 문제는 주어진 괄호 문자열이 "올바른 괄호 문자열(VPS, Valid PS)"인지 확인하는 문제였다. 괄호의 짝이 맞는지, 순서대로 닫히는지 등을 확인해야 한다. 괄호 짝 맞추기 문제는 기본적으로 스택을 많이 사용해서 풀기 때문에, 스택에 대해 공부중이라면 한번쯤 풀어보는 것도 좋을 것 같다. 풀이 전략 - 열린 괄호 (는 스택에 넣는다. - 닫힌 괄호 )가 나오면 스택에서 하나를 꺼낸다. - 만약 스택이 비어있지 않거나, 닫힌 괄호가 나왔을 때 스택이 비어 있으면 올바른 괄호 문자열이 아니다. - 문자열을 다 처리하고 스택에 남은 괄호가 없다면 VPS이다.

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int T = sc.nextInt();  // 테스트 케이스 수
        sc.nextLine();  // 남은 엔터 처리
        
        for (int t = 0; t < T; t++) {
            String parentheses = sc.nextLine();
            System.out.println(isValidVPS(parentheses) ? "YES" : "NO");
        }
        
        sc.close();
    }

    public static boolean isValidVPS(String parentheses) {
        Stack stack = new Stack<>();
        
        for (char ch : parentheses.toCharArray()) {
            if (ch == '(') {
                stack.push(ch);  // 열린 괄호는 스택에 넣기
            } else if (ch == ')') {
                if (stack.isEmpty()) {
                    return false;  // 닫힌 괄호가 나오는데 스택이 비어 있으면 잘못된 문자열
                }
                stack.pop();  // 닫힌 괄호는 스택에서 하나를 제거
            }
        }
        
        return stack.isEmpty();  // 모든 괄호가 짝을 맞추었으면 스택이 비어 있어야 함
    }
}

풀이 설명 - 먼저, 입력으로 주어진 테스트 케이스 수 T를 받았다. - 각 테스트 케이스마다 괄호 문자열을 받아서, isValidVPS 메서드를 호출하여 VPS 여부를 확인했다. - isValidVPS 메서드는 스택을 사용하여 괄호 문자열을 검사했다. - 열린 괄호 (가 나오면 스택에 넣고, 닫힌 괄호 )가 나오면 스택에서 하나를 꺼냈다. - 만약 스택이 비어있는데 닫힌 괄호가 나온다면 이는 잘못된 괄호 문자열이므로 false를 반환했다. - 모든 괄호를 처리한 후 스택이 비어 있으면 올바른 괄호 문자열로 판단하고 true를 반환한다.