suheang

[백준] | JAVA, 자바 | 9012번 - 괄호 본문

알고리즘

[백준] | JAVA, 자바 | 9012번 - 괄호

suheang 2024. 8. 29. 21:47

https://www.acmicpc.net/problem/9012


문제 요약 :
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다.
입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.


문제 풀이 :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
    public static void main(String[] args) 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();
            Stack<String> stack = new Stack<>();
            boolean vps = true;
            for (int j = 0; j < s.length(); j++) {
                String check = String.valueOf(s.charAt(j));
                if (check.equals("(")) {
                    stack.push(check);
                } else {
                    if (stack.isEmpty()) {
                        vps = false;
                        break;
                    } else {
                        stack.pop();
                    }
                }
            }

            if (vps && stack.isEmpty()) {
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }
        }
    }
}

 
1. 테스트 데이터 개수 t 입력받기
2. 입력받은 t 만큼 문자열 입력받기
2 - 1. 스택 생성
2 - 2. vps 인지 확인할 boolean 변수 vps를 true로 생성
2 - 3. 입력받은 문자열을 한 글자씩 가져와서 "("이라면 스택에 저장
2 - 4. "(" 이 아닐 때 스택이 비어있다면 vps를 false로 변경하고 for 문 종료, 그렇지 않다면 스택에서 꺼내기
2 - 5. 만약 vps가 true고 스택이 비어있다면 "YES" 출력, 그렇지 않다면 "NO" 출력
(스택이 비어있는지까지 확인하는 이유는 짝이 없는 "(" 가 있다면 boolean vps 값은 true이지만 VPS가 아니기 때문)