프로그래머스 올바른 괄호 JAVA 풀이 (스택)

2026. 6. 22. 15:54·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 문제 개요

괄호 문자열이 주어졌을 때 올바른 괄호인지 판별하는 문제이다.

올바른 괄호란 열린 괄호 ( 가 나오면 반드시 대응되는 닫힌 괄호 ) 가 존재해야 하며, 순서 또한 올바르게 짝지어져 있어야 한다.

예를 들어

  • ()() → 올바른 괄호
  • (())() → 올바른 괄호
  • )()( → 올바르지 않은 괄호
  • (()( → 올바르지 않은 괄호

문자열이 올바른 괄호이면 true, 아니면 false를 반환한다.


📌 접근 방법

괄호의 짝을 확인해야 하므로 스택(Stack)을 사용한다.

문자를 하나씩 확인하면서

  • ( 이면 스택에 저장한다.
  • ) 이면 가장 최근에 저장된 ( 와 짝을 맞춘다.

만약 ) 를 만났는데 스택이 비어 있다면 짝이 맞는 ( 가 없는 것이므로 즉시 false를 반환한다.

모든 문자를 확인한 뒤에도 스택에 ( 가 남아 있다면 짝이 맞지 않은 괄호가 존재하는 것이므로 false를 반환한다.


📌 핵심 아이디어

1. 열린 괄호는 스택에 저장

열린 괄호가 나오면 나중에 닫힌 괄호와 짝을 맞추기 위해 스택에 저장한다.

if(ch == '('){
    stack.push(ch);
}

2. 닫힌 괄호가 나오면 짝 확인

스택이 비어있다는 것은 짝이 되는 ( 가 없다는 의미이다.

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

예시 : 첫 문자부터 짝이 맞지 않으므로 바로 false를 반환한다.

)()(
^

3. 짝이 존재하면 제거

가장 최근의 ( 와 현재 ) 를 하나의 쌍으로 처리한다.

stack.pop();

 

예시

(())

과정

( -> push
( -> push
) -> pop
) -> pop
 

최종적으로 스택이 비게 된다.


4. 모든 순회 후 스택 확인

return stack.isEmpty();

예시

(()(

과정

( -> push
( -> push
) -> pop
( -> push

최종 스택 : 스택이 비어있지 않으므로 false를 반환한다.

[(, (]

📌 전체 코드

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

class Solution {
    boolean solution(String s) {
        Deque<Character> stack = new ArrayDeque<>();

        for(int i = 0; i < s.length(); i++){
            char ch = s.charAt(i);

            if(ch == '('){
                stack.push(ch);
            } else {
                if(stack.isEmpty()){
                    return false;
                }
                stack.pop();
            }
        }

        return stack.isEmpty();
    }
}
 

📄 정리

  • 괄호의 짝을 확인하는 대표적인 스택 문제이다.
  • ( 는 push, ) 는 pop으로 처리한다.
  • ) 를 만났는데 스택이 비어있으면 즉시 false를 반환한다.
  • 순회가 끝난 뒤 스택이 비어있어야 올바른 괄호이다.
  • 괄호 종류가 하나뿐이라 카운터 변수만으로도 해결 가능하지만, 스택 풀이가 직관적이고 확장성이 좋다.
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 다음 큰 숫자 JAVA 풀이 (비트 연산, Integer.bitCount)  (0) 2026.06.23
프로그래머스 피보나치 수 JAVA 풀이 (DP, 공간 최적화)  (0) 2026.06.22
프로그래머스 최솟값 만들기 JAVA 풀이 (그리디, 정렬)  (0) 2026.06.21
프로그래머스 JadenCase 문자열 만들기 JAVA 풀이 (문자열, 구현)  (0) 2026.06.20
프로그래머스 최댓값과 최솟값 JAVA 풀이 (문자열, 구현)  (0) 2026.06.18
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 다음 큰 숫자 JAVA 풀이 (비트 연산, Integer.bitCount)
  • 프로그래머스 피보나치 수 JAVA 풀이 (DP, 공간 최적화)
  • 프로그래머스 최솟값 만들기 JAVA 풀이 (그리디, 정렬)
  • 프로그래머스 JadenCase 문자열 만들기 JAVA 풀이 (문자열, 구현)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    solved.ac
    프로그래머스
    알고리즘
    자바
    정보처리기사 실기 기출문제
    코딩테스트
    문자열
    정처기
    정렬
    백준
    level0
    정보처리기사
    dp
    정처기오답노트
    정처기실기
    level1
    기출문제
    실기
    구현
    수학
    브루트포스
    백엔드개발자
    시뮬레이션
    java
    springboot
    피보나치
    완전탐색
    Level2
    자료구조
    배열
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 올바른 괄호 JAVA 풀이 (스택)
상단으로

티스토리툴바