백준 - 괄호[java]

스브코·2021년 11월 23일
0

문제출처: https://www.acmicpc.net/problem/9012

문제설명

괄호 문자열이 입력 값으로 들어 오는데 올바른 괄호로 구성 되어 있는지 확인하는 문제 이다.

첫번쨰 확인할 점: () 열린 괄호의 쌍이 잘 맞는지

두번째 확인할 점: (())), ((( 괄호의 쌍의 갯수가 잘 맞는지

예제 입력

6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(

3
((
))
())(()

예제 출력

NO
NO
YES
NO
YES
NO

NO
NO
NO

문제 풀이

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 total = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < total; i++) {
            Stack<Character> st = new Stack<>();
            String s = br.readLine();
            boolean print = false;
            for(int j = 0; j < s.length(); j++) {
                if(s.charAt(j) == '(')
                    st.push(s.charAt(j));
                else{
                    if(st.isEmpty()) {
                        sb.append("NO\n");
                        print = true;
                        break;
                    } else
                        st.pop();
                }
            }
            if(!print) {
                if(st.isEmpty())
                    sb.append("YES\n");
                else
                    sb.append("NO\n");
            }
        }
        br.close();
        System.out.println(sb);
    }
}

스택에 넣어서 해결하면 되는 문제이다.

'('괄호이면 스택에 넣고 ')'이면 스택에서 꺼낸다.

')'일때 스택이 비어있으면 짝이 맞지 않으므로 바로 NO를 출력하고 모든 문자열 스캔을 마친 후 스택이 비어있으면 YES를 리턴한다.

만약에 모든 문자열 스캔을 마친후 스택이 비어 있지 않으면 역시 NO를 리턴한다.

profile
익히는 속도가 까먹는 속도를 추월하는 그날까지...

0개의 댓글