본문 바로가기

백준

[백준] 9012 괄호_ JAVA

● 문제


● 풀이

 

스택을 활용하는 대표적인 문제

 

여는 괄호 '(' 가 들어오면 스택에 쌓고(push) 닫는 괄호 ')' 가 들어오면 지우면(pop) 된다.

 

주의할 점 : 예를 들어 닫는 괄호가 여는 괄호보다 많이 들어온 경우나 처음부터 닫는 괄호가 들어온 경우에는

스택이 비어있는 상태에서 또 닫는 괄호가 들어오면 빈 스택에 pop을 하게 되므로 오류가 난다.

그래서 스택이 비어있으면 함수를 종료하여야 한다.

 

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

public class Main {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int T = in.nextInt();

        for(int i =0; i<T; i++){
            System.out.println(solve(in.next()));
        }
    }

    private static String solve(String s) {
        Stack<Character> stack = new Stack<>();

        for(int i =0; i<s.length(); i++){
            char c = s.charAt(i);

            if(c == '('){
                stack.push(c);
            }
            else if(stack.empty()){
                return "NO";
            }
            else
                stack.pop();
        }

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

    }
}