본문 바로가기

코딩테스트/백준

[백준-자바] 4949번 균형잡힌 세상 / 2022.03.17

 

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

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

 

 

import java.util.Scanner;
import java.util.Stack;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Stack<Character> stack = new Stack<>();

        while(true){
            String str = sc.nextLine();
            if(str.equals(".")) { // .이 입력되면 종료
                return;
            }
            for(int i=0; i<str.length(); i++){
                char a = str.charAt(i);
                if(a=='(' || a=='[' || a==')' || a==']'){ // ( [ ) ] 일 때에만 실행
                    if (stack.isEmpty()) // 스택이 비어있다면 무조건 push
                        stack.push(a);
                    else if (a == ')' && stack.peek() == '(') // 닫힌 괄호 ')' 일 때 스택의 맨 위가 열린 괄호 '(' 라면
                        stack.pop(); // 맨 위 열린 괄호 '(' pop
                    else if (a == ']' && stack.peek() == '[') // 닫힌 괄호 ']' 일 때 스택의 맨 위가 열린 괄호 '[' 라면
                        stack.pop(); // 맨 위 열린 괄호 '[' pop
                    else // 위의 조건문에 해당하지 않으면 push
                        stack.push(a);
                }
            }
            if(stack.isEmpty()) // 스택이 비어있다면 균형적인 문자열
                System.out.println("yes");
            else
                System.out.println("no");

            stack.clear(); // 다음을 위해 stack 비우기
        }

    }
}