백준

[백준]4949: 균형잡힌 세상, 스택 문제풀이

새우는 맛있새우 2025. 1. 19. 10:47

 

아주 재밌는 문제였다.


정답 코드

package stackEx;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Q4 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

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

            Stack<Character> stack = new Stack<>();
            for (int i = 0; i < S.length(); i++) {
                if (S.charAt(i) == '(' || S.charAt(i) == '[') {
                    stack.push(S.charAt(i));
                } else if (S.charAt(i) == ')') {
                    if (stack.isEmpty()) {
                        stack.push(')');
                        break;
                    }
                    if (stack.peek() == '(') {
                            stack.pop();
                    } else stack.push(')');
                }else if (S.charAt(i) == ']') {
                    if (stack.isEmpty()) {
                        stack.push(']');
                        break;
                    }
                    if (stack.peek() == '[') {
                            stack.pop();
                    } else stack.push(']');
                }
            }

            if (stack.isEmpty()) {
                sb.append("yes").append("\n");
            } else sb.append("no").append("\n");
        }
        System.out.println(sb);
    }
}

 

스택 정리글을 참고했다.

2024.12.10 - [자료구조] - 자 바 스 택 클 래 스

 

자 바 스 택 클 래 스

https://ittrue.tistory.com/200 [Java] 자바 스택(Stack) 클래스 메서드 정리 및 활용스택이란? 스택은 ‘쌓다.’, ‘쌓이다.’와 같은 뜻을 가진 용어로, 접시를 높이 쌓아 놓은 형태와 비슷한 자료구조이

study-with-mini.tistory.com


코드 정리를 해보자면,

만약 원하는 여는 괄호가 있다면, push해주지 않고 그냥 바로 pop해서 비워준다.

하지만 스택 내부가 비어있거나, 원하는 여는 괄호가 들어있지 않는 경우에는, 

초반에 empty인 경우나, '(' ---> ')' ---> ')' 이 순서대로 들어오는 경우 등 만약 push해주지 않고 break한다면, 

내부가 비어있게 된다. 따라서 push를 진행 한 후 break를 해주면 되겠다!!