PS/BOJ

BOJ 9012 괄호 [Java]

모달조아 2021. 7. 18. 06:05

BOJ 9012 괄호

- 문제 링크

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

- 문제 해설

VPS가 아닌 경우는 어떤 경우가 있을지를 생각해보자.

  1. 짝이 되는 ')'가 없어 '('이 남는 경우
  2. 짝이 되는 '(' 없이 ')'이 먼저 입력되는 경우

'('가 입력될 때마다 '('를 스택에 담아주고, ')'가 입력되면 스택의 최상단에 있는 '('를 pop해주는 방식으로 동작하게 한다.
그렇게 구현하였을 경우 과정이 끝났을 때, 스택이 비어있지 않으면 1의 경우이다.
스택이 비어있을 때, ')'가 들어오는 경우가 2의 경우이다.

위 내용을 바탕으로 코드를 구현하였다.

- 코드 보기

import java.io.*;
import java.util.Stack;

public class Main
{
    static int n;

    public static String VPS(String str) throws IOException
    {
        Stack<Character> s = new Stack<>();

        for (int j = 0; j < str.length(); j++)
        {
            char c = str.charAt(j);
            if (c == '(')
                s.push(c);
            else if (c == ')')
            {
                if (!s.empty())
                {
                    if (s.peek() == '(')
                        s.pop();
                }
                else if (s.empty())
                {
                    return "NO";
                }
            }
        }

        if (s.empty())
            return "YES";
        else
            return "NO";
    }

    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        n = Integer.parseInt(br.readLine());

        for (int i = 0; i < n; i++)
        {
            String str = br.readLine();
            bw.write(VPS(str) + "\n");
        }

        br.close();
        bw.flush();
        bw.close();
    }
}