백준 9012번(스택 구조)

김경욱·2025년 9월 11일

백준

목록 보기
74/121

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

import java.util.*;

import static java.util.Collections.*;

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

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

   int N = Integer.parseInt(br.readLine());

   for (int i = 0 ; i < N; i++)
   {
       String line = br.readLine();

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

       boolean balance = true;

       for (char ch : line.toCharArray()) {
           if (ch == '(') {
               stack.push(ch);
           }

           if (ch == ')') {
               if (stack.isEmpty()) {
                   balance = false;
                   break;
               }
                else{
                   stack.pop();
               }

           }

       }
           if (balance && stack.isEmpty())
           {
               System.out.println("YES");
           }
           else{
               System.out.println("NO");
           }
       }


   }




}

이전 문제랑 비슷하게 스택 구조를 이용해서 문제를 푸는 문제이다. .pop()은 가장 최근에 들어간 값을 제거하는 것이다. 따라서 (이 push가 된 후에 )이 들어올 때 문자열이 비어있지 않다면 pop을 이용하여 (을 제거하는 방식으로 진행한 후에 만약 문자열을 다 검사하고서 문자열이 비어 있지 않다면 개수가 맞지 않는다는 것이므로 false이다.

0개의 댓글