본문 바로가기
코딩테스트 준비/백준

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

by mwzz6 2025. 2. 11.

https://www.acmicpc.net/problem/4949

 

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


1.  아이디어

 

소괄호와 대괄호가 모두 서로 소거되면 되는 문제로 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.


2. 문제풀이

 

StringTokenizer로 괄호를 기준으로 파싱한 후 괄호에 대해서 Stack으로 매핑을 시켜주는 방식으로 구현했다.


3. 코드

 

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));
        StringTokenizer st;

        while (true) {
            String input = br.readLine();
            if (input.equals(".")) break;

            Deque<String> stack = new ArrayDeque<>();
            st = new StringTokenizer(input, "()[]", true);
            boolean flag = true;

            while (st.hasMoreTokens()) {
                String token = st.nextToken();
                if (!(token.equals("(") || token.equals(")") || token.equals("[") || token.equals("]"))) continue;

                if (token.equals("(") || token.equals("[")) stack.push(token);
                else {
                    if (stack.isEmpty()) {
                        flag = false;
                        break;
                    } else {
                        String pop = stack.pop();

                        if (pop.equals("(")) {
                            if (token.equals("]")) {
                                flag = false;
                                break;
                            }
                        } else {
                            if (token.equals(")")) {
                                flag = false;
                                break;
                            }
                        }
                    }
                }
            }

            if (!stack.isEmpty()) flag = false;

            if (flag) bw.write("yes\n");
            else bw.write("no\n");
        }

        bw.flush();
    }
}

4. 후기