[백준] 9012번 : 괄호

김건우·2023년 8월 3일
0

문제 풀이

목록 보기
16/62

괄호


풀이 방법

이번 문제는 스택을 활용한 문제 중 대표적인 문제였다.
여는 괄호에 대응해서 닫은 괄호가 있는지 체크해주면 해결되는 문제였다.

막혔던 부분이라면 자바의 StringTokenizer가 문자열에서 문자 하나하나씩 분리해 줄거라 생각했다.
하지만 예상처럼 들어가지 않았고, 문자열의 charAt을 통해 하나하나씩 읽었다.

이번에는 스택을 구현하지 않고, 자바에서 제공해주는 클래스를 통해 해결했다! (복잡한 계산이 없기에)

참고 사이트
https://st-lab.tistory.com/178

여기에선 인덱스를 이용한 방법도 있었는데, 단일 괄호이기에 가능한 방법이었다.
여러 해결 방법을 접해보는 것이 중요한 것 같다!


코드

import java.io.*;
import java.util.*;

class Main {
    static String[] stack = new String[50];
    static int size=0;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

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

        for(int i=0;i<n;i++){
            sb.append(solve(br.readLine())).append("\n");
        }

        System.out.println(sb);
    }

    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);
            }
            if(c==')' && stack.empty()) {
                return "NO";
            }
            if(c==')' && !stack.empty()){
                stack.pop();
            }
        }
        if(stack.empty()){
            return "YES";
        }
        if(!stack.empty()){
            return "NO";
        }
        return s;
    }
}
profile
공부 정리용

1개의 댓글

comment-user-thumbnail
2023년 8월 3일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기