Problem


괄호만으로 이루어진 문자열이 주어졌을 때 VPS 인지 확인하는 문제입니다.


VPS 란 Valid PS 의 약자로 여는 괄호와 닫는 괄호가 한쌍을 이루는 문자열입니다.




Solution

원래는 스택을 활용하는 문제지만 사실 스택을 사용하지 않아도 됩니다.


문자열은 무조건 ( 또는 ) 만 들어오기 때문에


( 가 들어오면 count++ 


) 가 들어오면 count-- 


처리 해주면 쉽게 구할 수 있습니다.


만약 count 가 음수가 된다면 ( 없이 ) 가 들어왔다는 뜻입니다.


올바른 괄호 문자열이 될 수 없기 때문에 뒤의 문자들은 볼 필요 없이 VPS 가 될 수 없습니다.


문자열을 전부 돌고 난 다음에는 count 가 0 이 되어야 VPS 조건을 만족합니다.


count 가 1 이상이라면 ) 숫자보다 ( 숫자가 더 많다는 뜻이므로 VPS 가 될 수 없습니다.



Java Code

import java.io.*;

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

        int n = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        
        for (int i=0; i<n; i++) {
            String result = isVPS(br.readLine()) ? "YES\n" : "NO\n";
            sb.append(result);
        }
        
        System.out.println(sb);
    }

    static boolean isVPS(String s) {
        int count = 0;

        for (char c : s.toCharArray()) {
            if (c == '(') {
                count++;
            } else {
                if (count == 0) return false;
                count--;
            }
        }

        return count == 0;
    }
}


+ Recent posts