문자열 s가 올바른 괄호로 이루어져 있으면 true, 그렇지 않으면 false를 반환하는 문제이다.
"(())()" → true
")(" → false
"(((" → false
스택(Stack) 자료구조를 사용하였다.
| 상황 | 처리 |
|---|---|
| 여는 문자 등장 | push |
| 닫는 문자 등장 | 스택이 비어있으면 false, 아니면 pop |
| 순회 완료 | 스택이 비어있으면 true, 남아있으면 false |
( 를 만나면 스택에 push) 를 만나면 스택에서 pop (짝이 맞는 (를 제거)) 를 만났는데 스택이 비어있으면 → 짝이 없는 ) → falsetrue(가 있음 → false예시로 확인하면 아래와 같다.
s = "(())()"
'(' → push 스택: ['(']
'(' → push 스택: ['(', '(']
')' → pop 스택: ['(']
')' → pop 스택: []
'(' → push 스택: ['(']
')' → pop 스택: []
순회 완료 → 스택 비어있음 → true ✅
s = ")("
')' → 스택 비어있음 → false ✅
마지막 반환 부분은 stack.isEmpty()가 이미 true/false를 반환하므로 if-else 없이 바로 반환할 수 있다.
// if-else 대신
return stack.isEmpty();
구체적으로 정리한 풀이 흐름:
(이면 스택에 push)이면 스택이 비어있으면 false, 아니면 popstack.isEmpty() 반환import java.util.Stack;
class Solution {
boolean solution(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
stack.push(c);
} else if (c == ')') {
if (stack.isEmpty()) {
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
}
