백준 > 괄호

jinvicky·2023년 11월 24일
0

ALG

목록 보기
3/62

괄호

(과 )가 매치되는 지를 YES OR NO로 출력한다.
문장 수를 입력받고 문장들을 처리하는 방식은 단어 뒤집기와 같은 입력 형식을 사용한다.

package src.baekjoon;

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

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int length = Integer.parseInt(br.readLine());
        StringBuilder result = new StringBuilder();

        String yn = "";

        for (int i = 0; i < length; i++) {
            StringTokenizer str = new StringTokenizer(br.readLine(), "");
            while (str.hasMoreTokens()) {
                String test = str.nextToken();
                StringBuffer sb = new StringBuffer(test);
                Stack<Character> leftStack = new Stack<Character>();
                Stack<Character> rightStack = new Stack<Character>();

                for(int j = 0; j < test.length(); j++) {
                    char character = test.charAt(j);
                    if(character == '(') { //괄호가 (라면
                        leftStack.push(character);
                    } else {
                        if (!leftStack.isEmpty()) { // 스택이 비지 않았으면 pop인데
                            leftStack.pop();
                        } else {
                            rightStack.push(character);
                        }
                    }
                }
                // yn 여부 파별
                if (leftStack.isEmpty() && rightStack.isEmpty()) {
                    yn = "YES";
                } else yn = "NO";
                result.append(yn + "\n");
            }
        }
        System.out.println(result);
    }
}

결과 : 정답
(를 넣는 leftStack와 )를 넣는 rightStack을 별도로 선언하고
줄마다 괄호를 쪼개는 것은 for문과 charAt()메서드를 사용해서 nextToken()을 처리하는 방식을 썼다.

profile
일단 쓰고 본다

0개의 댓글