본문 바로가기
java

[java]백준 9012 괄호

by MiaCoder 2024. 1. 31.

처음에 이 문제를 봤을 때는 어떤 규칙이 있는 지 파악하기 힘들었다. 

 

'('와 ')'의 수를 세야하는 가 싶기도 했다. 

 

하지만 스택을 활용하여 해결하면 간단한문제였다.

 

생각지도 못한 부분에서 잘못돤 정답이 나오는 경우도 있으니 꼼꼼히 생각해보자.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

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

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

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

        for (int i = 0; i < T; i++) {
            String str = br.readLine();
            Stack<Character> stack = new Stack<>();
            //매 반복문 마다 stack가 초기화 될 필요가 있으므로 반복문 내에서 생성한다.

            for (int j = 0; j < str.length(); j++) {
            //주어진 문장에서 각 괄호값들을 비교하는 반복문

                if (str.charAt(j) == '(') {
                    stack.push('(');
                    // '('의 경우에는 스택에 추가한다.
                    
                } else {
                	// '('가 아닌 경우에는 즉 ')'인 경우에는
                    
                    if (!stack.isEmpty()) {
                        stack.pop();
                        //스택에 값이 있다면 해당 값을 스택으로부터 제거한다.
                        // 즉 (가 스택에 있을 때 )갯수만큼 스택에서 제거함으로서 짝을 맞춘다고 보면 된다.
                    } else {
                        stack.push(')');
                        break;
                        // 하지만 ')'값부터 입력받을 수도 있다. 이런 경우에는 더 이상 비교할 필요없이 
                        // 짝이 맞지않으므로 No를 출력한다
                    }
                }
            }

            if (stack.isEmpty()) {
                System.out.println("YES");
                // 스택이 비었다는 것은 '('와 ')'가 모두 짝이 맞다는 것을 의미
                
            } else {
                System.out.println("NO");
                // '('가 스택에 남아있거나, ')'로 시작하여 짝이 맞지 않는 경우
            }

        }
    }

}

'java' 카테고리의 다른 글

[java] 백준 4949 균형잡힌 세상  (1) 2024.02.13
[java] 백준 10773 제로  (0) 2024.01.31
[java] 백준 28278 스택2  (0) 2024.01.31
[java] 백준 13909 창문 닫기  (1) 2024.01.29
[java] 17103 골드바흐 파티션  (0) 2024.01.29