본문 바로가기
Language/Java

[백준 | Java] 4949번 균형잡힌 세상

by ㅇ달빛천사ㅇ 2025. 2. 7.
728x90
4949번 / 균형잡힌 세상

균형잡힌 세상

🏷️ 관련 주제 : Stack




💦 나의 시도

스택(Stack)을 이용한 방법

괄호를 매칭하는 것은 한 글자씩 읽을 때,
현재의 괄호와 이전에서 맨 마지막에 나온 괄호와 매칭을 하므로
LIFO 원칙을 따름
따라서 스택(Stack)을 이용하는 것이 적합하다고 판단

  1. 여는 괄호((, [)는 스택에 추가 (push())
  2. 닫는 괄호(), ])는 스택의 맨 위 원소와 비교하여
    • 쌍이 매칭이 되면((:) / [:]), pop()
    • 그렇지 않으면, no
  3. 마침표(.)가 나왔을 때,
    • 스택이 비어있지 않으면, no
    • 비어있으면, yes

❌ 틀렸습니다.

처음에 LIFO 원칙을 따르는 것을 착각하여 큐(Queue)를 잘못 사용하였는데
코드를 읽어보고 스택으로 수정하여 제출 성공하였습니다.




📑제출 기록 및 오답 원인



💯 해결 방법

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        Stack<Character> stack = new Stack<>();

        while (true) {
            String input = br.readLine();

            if (input.equals(".")) {
                bw.close();
                break;
            }

            for (char c : input.toCharArray()) {
                if (c == '(' || c == '[') {
                    stack.push(c);
                } else if (c == ')') {
                    if (stack.isEmpty() || stack.peek() != '(') {
                        bw.write("no\n");
                        stack.clear();
                        break;
                    }

                    stack.pop();
                } else if (c == ']') {
                    if (stack.isEmpty() || stack.peek() != '[') {
                        bw.write("no\n");
                        stack.clear();
                        break;
                    }

                    stack.pop();
                } else if (c == '.') {
                    if (!stack.isEmpty()) {
                        bw.write("no\n");
                        stack.clear();
                        break;
                    }

                    bw.write("yes\n");
                    stack.clear();
                }
            } 
        }
    }
}
728x90