개발자 미니민의 개발스터디

[백준 JAVA] 9012번 풀이 - 괄호 (✨✨✨)

by mini_min

package quiz;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

/**
 * 괄호.
 * 괄호 문자열 = '(' , ')' 만으로 구성되는 문자열이다.
 * 괄호 모양이 바른 것 = 올바른 괄호 문자열 (vps)
 * 한 쌍의 괄호 기호로된 문자열 "()" : 기본 vps
 * x가 vps 라면 "(x)" 문자열도 vps 가 된다.
 * 그리고 두 vps x와 y 를 접합 시킨 문자열 xy 도 vps 가 된다. (vps + vps => vps)
 * 입력으로 주어진 괄호 문자열이 vps 인가 판단하는 yes, no 프로그램을 만드시오.
 */
public class _9012 {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int testCaseCount = Integer.parseInt(br.readLine());

        for ( int i = 0; i < testCaseCount; i++ ){
            System.out.println(searchBracket(br.readLine()));
        }
    }

    public static String searchBracket(String word) {
        Stack<Character> stack = new Stack<>();

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

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

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

    }
}

 

풀이

"(" 가 들어오는 경우 = stack 에 push 하고 

")"가 들어오는 경우 = stack 에서 pop 해서 빼낸다. 

 

(경우의 수 1) 그럼 vps 인 경우는 stack 이 비어있을 것이다. (stack.empty==true)

(경우의 수 2) "(" 가 더 많은 경우, stack 은 empty 가 아닐 것이다. 

(경우의 수 3) 만약, stack 이 이미 비어있는 상태가 확인된다면, 더 이상 빼낼 것이 없다는 뜻으로 NO 값을 return 한다.  

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기