[백준_4949] 균형잡힌 세상 - JAVA

jm_25·2021년 12월 23일
0

알고리즘

목록 보기
40/40

문제 출처

https://www.acmicpc.net/problem/494928a93cce0db8/image.png)

풀이

  • 스택 문제로 괄호의 Push / Pop 여부만 잘 체크해주면 쉽게 풀 수 있다.
  • 처음 괄호 시작 시 ')' or ']'가 들어올 경우에는 균형잡힌 괄호가 아니므로 "no"를 출력한다.

코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer = null;
        String str = null;
        while (true) {
            Stack<Character> stack = new Stack();
            boolean fail = false;
            str = bufferedReader.readLine();
            if (".".equals(str)) break;
            stringTokenizer = new StringTokenizer(str);
            while (stringTokenizer.hasMoreTokens() && !fail) {
                char[] wordToCharsArray = stringTokenizer.nextToken().toCharArray();
                for (int i = 0; i < wordToCharsArray.length; i++) {
                    if (stack.isEmpty() && wordToCharsArray[i] == ')' || stack.isEmpty() && wordToCharsArray[i] == ']') {
                        fail = true;
                        break;
                    }
                    switch (wordToCharsArray[i]) {
                        case '(':
                            stack.push('(');
                            break;
                        case ')':
                            if (stack.peek() == '(') {
                                stack.pop();
                            } else {
                                stack.push(')');
                            }
                            break;
                        case '[':
                            stack.push('[');
                            break;
                        case ']':
                            if (stack.peek() == '[') {
                                stack.pop();
                            } else {
                                stack.push(']');
                            }
                            break;
                    }
                }
            }
            if (fail) {
                System.out.println("no");
                continue;
            } else if (stack.isEmpty()) {
                System.out.println("yes");
            } else {
                System.out.println("no");
            }
        }
    }
}

채점 결과

profile
매일 매일 한 개씩

0개의 댓글