본문 바로가기
CodingTest/백준

백준 4949번 - 균형잡힌 세상

by 마운틴케이 2023. 12. 11.

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

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net


문제 분석

계속해서 문장을 입력받으며, "." 이 입력되면 종료된다.

각각의 문장 내에 포함된 소괄호 () 와 대괄호 [] 는 항상 짝을 이루어야 하며, 짝이 이루어진 문장이면 "yes",

하나라도 제대로 짝 지어지지 않는다면 "no" 를 출력하여야 한다.

아예 문장에 소괄호, 대괄호가 포함되지 않은 문장도 "yes"로 취급한다.


풀이

스택을 활용해 풀 수 있다.

좌측 괄호 ( 나 [ 가 주어지면 스택에 push() 하고, 우측 괄호 )나 ]를 만났을때 pop()으로 가장 마지막에 push된 문자를 꺼내

해당 괄호와 쌍을 이루는 지 체크하면 된다.

쌍이 이루어지지 않는다면 바로 "no"를 리턴한다.

문자열 순회가 끝난 뒤 스택에 값이 남아있어도 괄호가 쌍을 이루지 않은 것 이므로 "no"를 리턴한다.


코드

public class Example4949 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer bf = new StringBuffer();
        while (true) {
            String str = br.readLine();
            if (str.equals(".")) {
                break;
            }

            bf.append(solution(str) + "\n");
        }

        System.out.println(bf.toString());
    }

    public static String solution(String str) {
        String answer = "yes";
        Stack<Character> stack = new Stack<>();

        for (char c : str.toCharArray()) {
            if (c == '(' || c == '[') {
                stack.push(c);
            } else if (c == ')' || c == ']') {
                if (stack.isEmpty()) {
                    return "no";
                }
                char pop = stack.pop();

                if (c == ')') {
                    if (pop != '(') {
                        return "no";
                    }
                } else {
                    if (pop != '[') {
                        return "no";
                    }
                }
            }
        }

        if (!stack.isEmpty()) answer = "no";
        return answer;
    }
}

댓글 피드백은 언제나 환영합니다!

'CodingTest > 백준' 카테고리의 다른 글

백준 1966번 - 프린터 큐  (1) 2023.12.08
백준 1874번 - 스택 수열  (1) 2023.12.08
백준 9012번 - 괄호  (0) 2023.09.28
백준 10845 - 큐  (0) 2023.09.28
백준 4153번 - 직각삼각형  (0) 2023.09.22