[프로그래머스] 올바른 괄호 Java

Posted by , June 04, 2025
Algorithm프로그래머스코딩테스트
Series of프로그래머스

1. 문제 요약

2. 내 풀이 방법

시도1

  • 접근 방법
    • 스택 생성
    • 문자열 s를 char 배열로 변환해 순회 - for문 이용
    • 로직 처리
      • 스택이 비어있지 않고 현재 문자가 ')'이고 스택의 top이 '('이면 pop()
      • 그 외의 경우는 push()
    • 스택이 비어 있으면 true 아니면 false를 반환
  • 소스 코드
    import java.util.*;
    class Solution {
        boolean solution(String s) {
            boolean answer = true;
            
            // 1. 스택 생성
            Stack<Character> stack = new Stack<>();
            // 2. 문자열 `s`를 char 배열로 변환해 순회 - for문 이용
            char[] arr = s.toCharArray();
            for (int i=0; i<arr.length; i++) {
                // System.out.println(c);
                
                // 3. 로직 처리
                if (!stack.isEmpty() && stack.peek() == '(' && arr[i] == ')') {
                    // 스택이 비어있지 않고 현재 문자가 `')'`이고 스택의 top이 `'('`이면 pop()
                    stack.pop();
                } else {
                    // 그 외의 경우는 push()
                    stack.push(arr[i]);
                }
                
            }
            
            // System.out.println("isEmpty = " + stack.isEmpty());
            
            // 4. 스택이 비어 있으면 true 아니면 false를 반환
            answer = stack.isEmpty();
            
            return answer;
        }
    }

3. 문제 회고

  • 🔍 시도

처음 문제를 읽고 나서 스택으로 접근하는 방식이 자연스럽게 떠올랐다. 괄호의 짝을 맞추는 전형적인 문제였기 때문이다.

  • 🛠 해결 과정

처음에는 if-else 구조를 잘못 사용해서 결과가 잘못 나왔다. push()는 괄호의 짝이 맞지 않을 때 반드시 호출되어야 하는데 조건문 안에서만 처리하다 보니 예외가 발생했던 것이다. 나누었던 조건문을 하나로 합쳤더니 테스트 케이스를 모두 통과하였다.

  • ✅ 잘한 점

스택 자료구조를 이용해서 제한시간 안에 문제를 풀었다.

  • ⚠ 개선할 점

조건문 로직을 보다 명확하게 구현하는 연습이 필요하다. 다른 사람의 코드를 참고해보니 '('와 ')'의 개수를 각각 세어 합이 0이면 true를 반환하는 방식도 있었다. 스택 자료구조를 사용하지 않아 메모리 효율 면에서 더 나아 보였다.

참조