해당 문제는 스택 문제이다.
여는 괄호를 스택에 넣고, 닫는 괄호를 만나면 pop 해준다. 만약 반복문을 다 돌았음에도 stack의 크기가 0보다 크거나, 아니면 열린 괄호가 스택에 없음에도 불구하고 닫힌 괄호가 먼저 들어온다면 그 순간 false를 리턴해주면 된다.
큐는..편리하게 코드를 짜기위해 썼는데, 별 탈 없이 넘어간 것 같다. (StringBuilder로 하는게 좀 더 높은 점수를 받지 않았을까 싶다.)
import java.util.LinkedList;
import java.util.Stack;
class Solution {
public int solution(String s) {
if (s.length() % 2 == 1) return 0;
char[] chars = s.toCharArray();
LinkedList<Character> queue = new LinkedList<>();
for (char c : chars) queue.add(c);
int cnt = 0;
for (int i = 0; i < s.length(); i++) {
if(isRight(queue)) cnt++;
queue.addLast(queue.poll());
}
return cnt;
}
public boolean isRight(LinkedList<Character> q) {
Stack<Character> stack = new Stack<>();
if (q.getFirst() == ')' || q.getFirst() == '}' || q.getFirst() == ']'){
return false;
}
for (char c : q) {
if(c == '(' || c == '{' || c == '[') stack.push(c);
else if(stack.size() > 0){
if(c == ')' && stack.peek() == '('){
stack.pop();
} else if(c == ']' && stack.peek() == '['){
stack.pop();
} else if(c == '}' && stack.peek() == '{'){
stack.pop();
} else {
return false;
}
} else {
return false;
}
}
return true;
}
}