본문 바로가기

Tech/Problem Solving

[백준 9012] 괄호 (Java)

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

 

접근 방법

- 문자열 차례대로 '(' 가 나온 만큼 ')' 이 따라서 나와야 VPS가 된다.

- 문자열을 차례로 읽으면서 '(' 가 나오면 Stack에 push하고 ')' 가 나오면 pop을 한다.

- 문자열을 다 읽은 뒤 Stack이 비어있으면 VPS, 그렇지 않으면 일반 문자열로 분류한다.

- 문자열에 ')'가 먼저 나오는 경우, 이후 문자열과 상관없이 VPS는 될 수 없다.

 

최종 코드

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

public class Main {
    private static final String YES = "YES";
    private static final String NO = "NO";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int N = scanner.nextInt();
        String[] inputs = new String[N];
        scanner.nextLine();

        for (int i = 0; i < N; i++) {
            inputs[i] = scanner.nextLine();
        }

        for (int i = 0; i < N; i++) {
            String input = inputs[i];
            if (isVPS(input)) {
                System.out.println(YES);
            } else {
                System.out.println(NO);
            }
        }
    }

    private static boolean isVPS(String input) {
        Stack<Character> stack = new Stack<>();

        for (int j = 0; j < input.length(); j++) {
            if (input.charAt(j) == '(') {
                stack.push(input.charAt(j));
            } else {
                if (!stack.empty()) {
                    stack.pop();
                } else {
                    return false;
                }
            }
        }

        if (stack.empty()) {
            return true;
        } else {
            return false;
        }
    }


}
반응형

'Tech > Problem Solving' 카테고리의 다른 글

[백준 1182] 부분수열의 합 (Java)  (0) 2020.01.30
[백준 5430] AC (Java)  (0) 2020.01.27
[백준 1966] 프린터 큐 (Java)  (0) 2020.01.22
[백준 10866] 덱 (Java)  (0) 2020.01.16
[백준 1874] 스택 수열 (Java)  (0) 2020.01.15