BOJ 4949. 균형잡힌 세상

1 minute read

BOJ 4949. 균형잡힌 세상

image
image

풀이

수식의 괄호 쌍을 확인하는 문제이다.
수식의 괄호 쌍을 확인하는 방법은 아래와 같다.

  1. 여는 괄호가 나오면 스택에 추가한다
  2. 닫는 괄호가 나왔을 경우
    • 2.1 스택이 비어있다면 올바르지 않은 괄호 쌍이다
    • 2.2. 스택의 peek가 짝이 맞지 않는 괄호인 경우 올바르지 않은 괄호 쌍이다
    • 2.3. 스택의 peek가 짝이 맞는 괄호일 경우 pop 한다
  3. 모든 과정을 끝낸 후 스택에 괄호가 남아 있으면 올바르지 않은 괄호 쌍, 남아있지 않다면 올바른 괄호 쌍 이다.

문자와 공백을 제외하여 위 방법으로 괄호의 쌍을 검사한다.

import java.io.*;
import java.util.Stack;

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));
        String input = br.readLine();
        while (!input.equals(".")) {
            Stack<Character> s = new Stack<>();
            boolean isPerfect = true;
            for (int i = 0; i < input.length(); i++) {
                char c = input.charAt(i);
                if (!Character.isDigit(c) && c != '.' && c != ' ') {
                    if (!s.isEmpty() && s.peek() == '[' && c == ']') {
                        s.pop();
                    } else if (!s.isEmpty() && s.peek() == '(' && c == ')') {
                        s.pop();
                    } else if (c == '(' || c == '[') {
                        s.push(c);
                    } else if (c == ')' || c == ']') {
                        isPerfect = false;
                    }
                }
            }
            if (s.isEmpty() && isPerfect) bw.write("yes\n");
            else bw.write("no\n");
            input = br.readLine();
        }
        bw.flush();
        bw.close();
    }
}