[JAVA] 균형잡힌 세상

NoHae·2025년 4월 15일

백준

목록 보기
40/106

문제 출처

단계별로 풀어보기 > 스텍 큐 덱 > 균형잡힌 세상
https://www.acmicpc.net/problem/4949

문제 설명

어떤 문자열이 주어졌을 때, 소괄호, 대괄호 2종류의 괄호가 제대로 닫혔는지 확인하라.

접근 방법

stack을 이용하여 각각 '(', '[', ')', ']'의 경우에 따라 조건을 확립한다.

import javax.lang.model.element.UnknownAnnotationValueException;
import java.io.*;
import java.util.Scanner;
import java.util.Stack;

public class 균형잡힌_세상 {

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        while(true){
            String line = sc.nextLine();
            if(line.equals(".")) break;

            Stack<Character> stack = new Stack<>();

            boolean check = true;

            for(int i = 0; i<line.length(); i++){
                char c = line.charAt(i);
                if(c == '(' || c == '[') stack.push(c);
                else if(c == ')') {
                    if(stack.isEmpty()){
                        check = false;
                        break;
                    }
                    if(stack.pop() != '(') {
                        check = false;
                        break;
                    }
                } else if(c == ']') {
                     if(stack.isEmpty()){
                         check = false;
                         break;
                     }
                    if(stack.pop() != '[') {
                        check = false;
                        break;
                    }
                } else {
                    continue;
                }
            }
            if(stack.size() != 0) check = false;
            bw.write(check ? "yes\n":"no\n");
        }
        bw.flush();
        bw.close();
    }

}

Review

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

public class 균형잡인_세상_review {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        while(true){
            Stack<Character> stack = new Stack<>();
            String line = br.readLine();
            if(line.equals("."))break;
            boolean result = true;
            for(int i=0; i<line.length(); i++){
                char c = line.charAt(i);
                switch(c) {
                    case '(':
                    case '[': stack.push(c);
                    break;
                    case ')': if (stack.isEmpty() || stack.pop() != '(') result = false;
                    break;
                    case ']': if (stack.isEmpty() || stack.pop() != '[') result = false;
                    break;
                }
                if(!result) break;
            }
            if(!stack.isEmpty()) result = false;
            bw.write(result?"yes\n":"no\n");

        }
        bw.flush();
        bw.close();
        br.close();
    }
}

알게된 점

괄호가 제대로 닫혔는지 확인해야하므로 '(', '['들이 남김 없이 닫혔는지까지 확인해야한다.
처음에는 문제를 잘 못 이해하여 stack을 2개 생성하여 만들려고 했었다.
Review
Switch문을 이용하여 좀 더 깔끔하게 풀어보고자 했다.

문제푼 흔적


Review

profile
노력 해보려고 하는 사람(00년생 소프트웨어융합학과, 24년 12월 부터 백엔드 및 코테 공부 시작)

0개의 댓글