이전에 활용한 스택 문제와 유사하다. ex) ' ( ' 가 무조건! 먼저 와야지 ' ) ' 가 올 수 있음!
import java.util.Stack;
class Solution {
public int solution(String s) {
int answer = 0;
if (checkStack(s)) {
answer++;
}
for (int i = 1; i < s.length(); i++) {
s = rotateString(s);
if (checkStack(s)) {
answer++;
}
}
return answer;
}
private String rotateString(String s) {
char firstChar = s.charAt(0);
return s.substring(1) + firstChar;
}
private boolean checkStack(String s) {
Stack<String> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
String c = String.valueOf(s.charAt(i));
if (s.charAt(i) == '[' || s.charAt(i) == '{' || s.charAt(i) == '(') {
stack.push(c);
} else {
if (!stack.isEmpty()) {
switch (c) {
case "]":
checkPeekAndDelete(stack, "[");
break;
case "}":
checkPeekAndDelete(stack, "{");
break;
case ")":
checkPeekAndDelete(stack, "(");
break;
}
} else {
stack.push(c);
}
}
}
return stack.isEmpty();
}
private static void checkPeekAndDelete(Stack<String> stack, String close) {
if (stack.peek().equals(close)) {
stack.pop();
}
}
}