import java.util.*;
class Solution {
boolean solution(String s) {
boolean answer = false;
// s가 홀수이거나 첫문자가 ')' 이거나 마지막 문자가 '(' 일 때 그대로 return
// 이 코드는 없어도 무관
if(s.length()%2!=0 || s.charAt(0)==')' || s.charAt(s.length()-1)=='('){
return answer;
}
Stack<Character> stk = new Stack<>();
for(int i=0; i<s.length(); i++){
// '(' 는 push
if(s.charAt(i)=='('){
stk.push('(');
// ')' 일 때는 스택이 비어있으면 false 리턴
// 아닐 경우에는 '('가 스택에 있기 때문에
// 스택안의 '(' 를 없애줌
} else {
if (stk.isEmpty()){
return answer;
} else {
stk.pop();
}
}
}
// 비어있으면(짝지어서 사라졌기 때문에) true, 남아있을 경우 false
answer = stk.isEmpty() ? true : false;
return answer;
}
}
Stack 자료 구조
- LFIO 구조 - > LAST IN FIRST OUT , 나중에 들어간 것이 먼저 나옴
- import java.util.Stack -> import
- Stack<Integer> stack = new Stack<>() -> int형 스택 선언
- stack.isEmpty() -> Stack 비어있는지 true ,false로 반환
- stack.push() -> Stack 에 값 추가
- stack.pop() -> Stack 맨 위의 저장된 값을 꺼냄
- stack.clear() -> Stack 초기화