[백준] 4949번: 균형잡힌 세상 (Java)

째리·2025년 2월 11일

코테연습

목록 보기
11/11

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

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      
        
        while(true) {
            String s = br.readLine();
            if(s.equals(".")){
                break;
            }


            System.out.println(brace(s)?"yes":"no");
        }

    }

    private static boolean brace(String s) {

        Stack<Character> stack = new Stack<>();
        boolean balance = true;
        for(int i=0; i<s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(' || c == '[') {
                stack.push(c);
            }
            else if (c == ')') {
                if (stack.isEmpty()) {
                    return false;
                }

                Character last = stack.pop();
                if (last != '(') {
                    return false;
                }
                
            } else if (c == ']') {
                if (stack.isEmpty()) {
                    return false;
                }

                char last2 = stack.pop();
                if (last2 !='[') {
                    return false;
                }
            }
        }

        if(!stack.isEmpty()) {
            return false;
        }

        return balance;

    }
}

안쪽에 있는 올바른 괄호 먼저 지워나가면 된다.
모든 괄호가 다 지워지면 균형이 맞는 문자열 -> yes

요지는 안쪽에 있는 괄호를 어떻게 찾을 것이가?

처음 찾을 수 있는 올바른 괄호 -> 처음 닫히는 괄호가 나오면 그 앞에서 열리는 괄호를 찾는다.

stack의 개념 활용

0개의 댓글