알고리즘 문제풀이

[백준 - 4949 JAVA] 균형잡힌 세상 : 스택 잘 사용하기

TutleKing 2023. 3. 18. 14:36

문제에 입력되는 영어 소문자들도 균형을 맞춰라 라고하는 느낌이 있어서 헤매다가 silver 등급의 문제길래 신경쓰지않았다. 

 

 

신경썼던 부분이 

  • stack을 static으로 전역에 선언했기 때문에 clear를 잊지않고 해줬어야했다.
  • 입력된 모든 문자열을 검사 한 이후에 문제가 없었을 경우 스택이 비어있지 않았다면 실패로 간주 
    : 여는 괄호 하나만 넣으면 verifyBlank 함수에서 못걸러내기 때문 
import java.util.*;
import java.io.*;

public class Main {
    static Stack<Character> stack = new Stack<>();

    public static void main(String[] agrs) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            String text = br.readLine();
            if (text.equals(".")) {
                break;
            }
            boolean isSuccess = true;
            for (char c : text.toCharArray()) {
                try {
                    verifyBlank(c);
                } catch (CustomException ex) {
                    System.out.println("no");
                    isSuccess = false;
                    stack.clear();
                    break;
                }
            }

            if(!stack.isEmpty()){
                System.out.println("no");
                isSuccess = false;
                stack.clear();
            }

            if (isSuccess) {
                System.out.println("yes");
            }

        }
    }

    static void verifyBlank(char c) {
        if(c =='.'){
            return;
        }

        if (c == '(' || c == '[') {
            stack.add(c);
            return;
        }

        if (c == ')') {
            if(stack.isEmpty()){
                throw new CustomException();
            }

            if (stack.peek().equals('(')) {
                stack.pop();
            } else {
                throw new CustomException();
            }
        } else if (c == ']') {
            if(stack.isEmpty()){
                throw new CustomException();
            }

            if (stack.peek().equals('[')) {
                stack.pop();
            } else {
                throw new CustomException();
            }
        }
    }

    static class CustomException extends RuntimeException {
        public CustomException() {
            super();
        }
    }
}

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

반응형