개발하자

[백준][Java] 9012번 괄호 본문

Algorithms/Baekjoon

[백준][Java] 9012번 괄호

개발리미 2025. 4. 25. 19:02
728x90

안녕하세요 :)

적어도 하루 1개 이상 알고리즘 문제를 해결하려 노력하고 있습니다.

혼자 해결 가능한 문제도 있고, 어려웠던 문제도 있던 차라 복습하고자  글을 써 내려갑니다.

 


 

백준 9012 괄호

이 문제는 괄호 문자열이 올바른지 판단하는 문제인데요,

이 문제는 int count로 괄호의 균형을 맞춰서 푸는 방식도 있지만

스택(Stack)을 활용해서 괄호의 짝을 직접 맞춰보는 방식으로 풀어봤습니다.

 

📘 문제

 

💡 해결 방법

여는 괄호 '('는 스택에 push, 닫는 괄호 '('가 나오면 스택에서 pop으로 없애줍니다. (짝 맞추기)

만약 '(' 괄호가 없어 pop할 수 있는 괄호가 없다면 잘못된 괄호쌍이므로 "NO".

모든 입력을 확인한 뒤 스택이 비어있다면 "YES" 아니면 "NO"를 출력합니다.

 

✅ 풀이 및 설명 (설명은 더보기 클릭)

더보기

 

  • 테스트 케이스 수 t를 입력받고, 각각의 괄호 문자열을 처리합니다.
  • 괄호 문자열을 문자 배열로 바꿔서 하나씩 확인합니다.
  • '('는 스택에 넣고, ')'는 짝이 될 '('가 있는지 확인 후 없으면 바로 break.
  • 반복문을 다 돌고 나서 스택이 비어 있다면 모든 괄호쌍이 잘 맞은 것이므로 "YES".
  • 그렇지 않으면 "NO".

 

import java.io.IOException;
import java.io.BufferedReader;
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 t = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < t; i++) {
            Stack<Character> stack = new Stack<>();
            char[] str = br.readLine().toCharArray();

            for (char s : str) {
                if (s == '(') {
                    stack.push(s); // 여는 괄호는 스택에 push
                } else {
                    if (stack.isEmpty()) {
                        stack.push(s); // 짝이 안 맞으므로 일단 넣고 break
                        break;
                    } else {
                        stack.pop(); // 짝이 맞으면 pop
                    }
                }
            }

            if (stack.isEmpty()) {
                sb.append("YES").append("\n");
            } else {
                sb.append("NO").append("\n");
            }
        }

        System.out.print(sb);
        br.close();
    }
}

 

이번 문제는 괄호 짝 맞추기를 통해 스택의 구조와 역할을 자연스럽게 익힐 수 있는 문제였어요.

단순히 boolean 변수로만 처리하지 않고 실제로 스택을 활용해서 푼 것이 좋은 연습이 되었습니다.

 


공부하면서 유용했던 부분 메모 겸 공유하고자 끄적입니다.

고쳐야 하는 부분 있다면 댓글 남겨주시면 수정하겠습니다.

행복한 하루 보내세요 (❁´◡`❁)

728x90
반응형