괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()"
또는"(())()"
는 올바른 괄호입니다.
")()("
또는"(()("
는 올바르지 않은 괄호입니다.
'('
또는')'
로만 이루어진 문자열s
가 주어졌을 때, 문자열s
가 올바른 괄호이면true
를 return 하고, 올바르지 않은 괄호이면false
를 return 하는 solution 함수를 완성해 주세요.
- 문자열
s
의 길이 : 100,000 이하의 자연수- 문자열
s
는'('
또는')'
로만 이루어져 있습니다.
s | answer |
---|---|
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = true;
Stack<String> stack = new Stack<>();
if(s.charAt(0)==')') return false;
for(int i=0; i<s.length(); i++){
if(s.charAt(i) == '('){
stack.add(s.substring(i,i+1));
continue;
}
if(s.charAt(i) == ')'){
if(stack.size() != 0) stack.pop();
}
}
if(stack.size() > 0) answer = false;
return answer;
}
}
💡 문자열
s
의 첫 번째 문자가)
라면 어차피 올바르지 못한 괄호이니 바로 false를 리턴 해 주도록 하였다
💡 이후 반복문으로 문자열
s
의 문자 하나씩 보며i
번째(
라면 스택에 넣어 주고)
라면 스택에 있던 왼쪽 괄호를 pop 시킨다 pop 시킬 때는stack
의 사이즈가 0이 아닐 때만 가능하다
💡 반복문으로 한 문자씩 검사한 후
stack
의 크기가 0보다 크다는 것은 pop이 덜 된 괄호(
가 남아 있다는 뜻이며 이는 당연히 올바른 괄호가 될 수 없다는 것을 의미하므로answer
을 false로 바꿔 준다
💡 처음에는 2, 6 번째 테스트 케이스에서 오류가 있었는데 맨 첫 번째 문자가
)
일 때 바로 false를 리턴 해 주는 걸 추가해 주니까 해결이 되었고, 또 효율성 검사에서 케이스 2번에서 오류가 있었는데 이는 continue를 추가하니 바로 해결이 되었다 🤔