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

NANO·2026년 3월 18일

[Algorithm]

목록 보기
7/10
post-thumbnail

문제 정보


문제 요약

문자열이 주어질 때 괄호 ()와 []가 올바르게 짝지어져 있는지 판별하는 문제.
. 만 입력되면 종료. 올바르면 yes, 아니면 no 출력.


풀이 접근

  1. 한 줄씩 입력받아 . 이면 종료
  2. 여는 괄호 (, [ 는 스택에 push
  3. 닫는 괄호 ), ] 가 나오면 스택에서 pop → 짝이 맞는지 확인, 스택이 비어있거나 짝이 안 맞으면 false
  4. 문자열 끝까지 순회 후 스택이 비어있으면 true

핵심 아이디어

  • 괄호 유효성 검사의 스택 기본 패턴: 열면 push, 닫으면 pop + 짝 확인
  • (, ) / [, ] 두 쌍을 동시에 처리해야 하므로 pop한 값과 현재 닫는 괄호 비교 필수
  • 알파벳, 공백, 기타 문자는 무시하고 괄호만 처리

코드

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            if (line.equals(".")) break;

            boolean result = check(line);
            System.out.println(result ? "yes" : "no");
        }
        scanner.close();
    }

    public static boolean check(String line) {
        Deque<Integer> stack = new ArrayDeque<>();
        for (int i = 0; i < line.length(); i++) {
            char c = line.charAt(i);

            if (c == '(' || c == '[') stack.push(c == '(' ? (int) '(' : (int) '[');
            if (c == ')' || c == ']') {
                if (stack.isEmpty()) return false;

                int top = stack.pop();

                if (c == ')' && top != '(') return false;
                if (c == ']' && top != '[') return false;
            }
        }
        return stack.isEmpty();
    }
}

배운 점 / 회고

  • abcd( 같이 push만 되는 경우, false로 판단하지 않을 수 있어서 stack.isEmpty()로 체크를 해줘야 한다.
  • 스택을 클래스 변수로 선언해서 초기화가 되지 않아 return stack.isEmpty(); 에서 문제가 발생했다. check() 함수 안에서 줄마다 스택이 초기화되게 만들어야 한다.
profile
즐거운 토마토

0개의 댓글