백준 - JAVA/스택

[백준] 9012번 괄호 _ JAVA ( 주석 설명 )

wch_s 2023. 3. 10. 03:18

풀이

1) 열린 괄호가 먼저이므로 '(' 가 나오면 stack에 push 한다.

2) ')' 가 나오면 stack에 pop 한다.

    이 때 stack.empty() 이면 바로 false 이다. ')' 가 더 많음

3) 문자열 전체 길이를 반복했을 때 stack에 값 존재 유무에 따라 return을 한다.

 

코드

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 str = br.readLine();
            if(solve(str) == true)
                System.out.println("YES");
            else
                System.out.println("NO");
        }
    }

    private static boolean solve(String str) {
        char[] str_char = str.toCharArray(); //개별 문자 탐색을 위해 문자 배열을 만든다. 

        Stack<Character> stack = new Stack<>(); 

        for(int i=0;i<str_char.length;++i) {
            if (str_char[i] == '(') {
                stack.push('(');
            }
            else {
                //')' 수가 더 많을 경우 empty 가 된다.
                if (stack.empty())
                    return false;
                stack.pop();
            }
        }
        //스택에 값이 남아있으면
        if(!stack.empty())
            return false;
        //스택에 값이 없으면
        //'(' , ')' 수가 맞으면 스택에 값이 없다.
        else
            return true;
    }
}