괄호 판별하는 문제는 스택을 사용하면 편하다.
import java.util.*;
class Solution {
static boolean check(String s) {
Stack<Character> stack = new Stack<>();
for(int i=0; i<s.length(); i++) {
char cur = s.charAt(i);
if(cur=='(') stack.push('(');
else if (cur == '{') stack.push('{');
else if (cur == '[') stack.push('[');
else if (cur==')') {
if(stack.isEmpty() || stack.peek()!='(') return false;
else stack.pop();
}
else if (cur=='}') {
if(stack.isEmpty() || stack.peek()!='{') return false;
else stack.pop();
}
else if (cur==']') {
if(stack.isEmpty() || stack.peek()!='[') return false;
else stack.pop();
}
}
if(stack.isEmpty()) return true;
else return false;
}
public int solution(String s) {
int answer = 0;
for(int i=0; i<s.length(); i++) {
String cur = s.substring(i,s.length())+s.substring(0,i);
if(check(cur)) answer++;
}
return answer;
}
}
스택을 활용하지 않고 괄호의 개수를 사용해서 풀어보려고 했으나 ({[[}]]) 같은 경우 결국 가장 최근에 사용된 열린 괄호의 정보가 필요했기 때문에 편하게 스택을 활용했다.