본문 바로가기
알고리즘 문제풀이/백준

[알고리즘/백준] 9012 괄호(자바, 스택)

by jeonghaemin 2021. 9. 30.
728x90

문제

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

풀이 코드

  • 여는 괄호는 스택에 넣고, 닫는 괄호면 스택에서 여는 괄호를 하나 꺼내서 괄호 쌍을 만든다.
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));
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(br.readLine());

        for (int i = 0; i < n; i++) {
            String s = br.readLine();
            Stack<Character> stack = new Stack<>();
            boolean isVPS = true;

            for (char c : s.toCharArray()) {
                if (c == '(') {
                    //여는 괄호이면 스택에 넣는다.
                    stack.push(c);
                } else {
                    //닫는 괄호인데 스택에 여는 괄호가 없다면 괄호 쌍이 맞지 않는 것이므로 VPS X
                    if (stack.isEmpty()) {
                        isVPS = false;
                        break;
                    }

                    //닫는 괄호를 만나면 여는 괄호를 하나 꺼내 쌍을 맞춘다.
                    stack.pop();
                }
            }

            //탐색이 완료되었음에도 불구하고 여는 괄호가 남아있다면 닫는 괄호와 쌍이 맞지 않는 것으므로 VPS X
            if (!stack.isEmpty()) {
                isVPS = false;
            }

            sb.append(isVPS ? "YES" : "NO").append("\n");
        }

        System.out.println(sb);
    }
}

댓글