프로그래머스 올바른 괄호 풀이 과정
어렵지 않게 한 번에 통과했다.
총 1번의 제출
1트 (정답)
→ 문자열을 순회하며 (는 스택에 push, )는 스택에서 pop한다.
→ )를 만났을 때 스택이 비어 있으면 짝이 맞지 않으므로 즉시 false를 반환한다.
→ 순회가 끝난 뒤 스택이 비어 있으면 모든 괄호가 올바르게 닫힌 것이다.
import java.util.*;
class Solution {
boolean solution(String s) {
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()) {
if(c=='(') stack.push(c);
else {
if(stack.isEmpty()) return false;
stack.pop();
}
}
return stack.isEmpty() ? true : false;
}
}
왜 스택인가
괄호 문제를 보는 순간 스택이 떠오른 건 자연스러운 흐름이었다. (는 "나중에 닫혀야 할 괄호"이고, )는 "가장 최근에 열린 괄호를 닫는다"는 구조가 후입선출(LIFO) 과 정확히 맞아떨어지기 때문이다.
)를 만났을 때의 처리가 핵심이다. 이 시점에 스택이 비어 있다는 건 짝이 없는 닫는 괄호라는 의미이므로 바로 false를 반환한다. 비어 있지 않다면 가장 최근에 push된 (와 짝이 맞는 것이므로 pop한다.
순회가 끝난 뒤에는 스택이 비어 있어야 한다. 스택에 (가 남아 있다는 건 닫히지 않은 괄호가 있다는 의미이기 때문이다.
정리하면 false가 되는 케이스는 딱 두 가지다.
)를 만났는데 스택이 비어 있는 경우 → 짝 없는 닫는 괄호- 순회가 끝났는데 스택에 원소가 남아 있는 경우 → 닫히지 않은 여는 괄호
이 두 케이스만 막으면 나머지는 자연스럽게 true가 된다.

괄호 문제는 스택의 LIFO 특성과 구조가 딱 맞아 떨어지는 대표적인 유형이라, 이 문제를 풀면서 "스택을 써야겠다"는 판단은 거의 즉각적으로 나왔다. 앞으로 괄호, 중첩 구조, 뒤에서 검증해야 하는 패턴이 보이면 스택을 가장 먼저 떠올리는 습관을 유지해야겠다.
'CS > 코딩테스트' 카테고리의 다른 글
| 프로그래머스 - 다리를 지나는 트럭 (JAVA) (0) | 2026.04.24 |
|---|---|
| 프로그래머스 - 프로세스 (JAVA) (0) | 2026.04.24 |
| 프로그래머스 - 기능개발 (JAVA) (0) | 2026.04.24 |
| 프로그래머스 - 같은 숫자는 싫어 (JAVA) (0) | 2026.04.23 |
| 프로그래머스 - 베스트 앨범 (JAVA) (0) | 2026.04.23 |
