괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
import java.util.Stack;
class Solution {
boolean solution(String s) {
boolean answer = true;
// 기본적으로 true로 선언
Stack<Character> stack = new Stack<>();
// 스택 선언
for(int i = 0; i < s.length(); i++){
// 문자열의 길이만큼 검사
if(s.charAt(i) == '('){
stack.push('(');
// 왼쪽 괄호면 '(' 넣어준다.
}else{
// 만약 오른쪽 괄호면 ')' 앞에 '('가 있는지 검증을 해준다.
if(stack.size() == 0){
// 스택이 비어있으면
answer = false;
}else if(stack.peek() == ')'){
// 스택이 비어있지 않지만 ')'가 앞에 있으면
answer = false;
}else{
// 앞에 '('가 있으면
stack.pop();
}
}
}
// 모든 과정이 끝나고 괄호가 다 사라져있어야 한다.
if(stack.size() == 0 && answer == true){
answer = true;
}else{
answer = false;
}
return answer;
}
}
스택 문제로 분류되어있어서 스택으로 차근차근 풀었다. 2단계 문제이긴 하지만 정답률이 높은 문제고, 난이도가 높지 않은 문제였기 때문에 쉽게 풀었다.