문제
문제링크
접근
- 기본적으로 스택을 이용한 괄호 유효성 검사 알고리즘이 필요하다.
- 괄호 회전 처리는 인덱스의 증감으로 처리하여 순회하며 개수를 센다.
풀이
import java.util.*;
class Solution {
int len;
char[] ss;
Deque<Character> stack = new ArrayDeque<>();
public int solution(String s) {
int answer = 0;
ss = s.toCharArray();
len = s.length();
for (int i = 0; i < len; i++)
if (isRight(i)) answer++;
return answer;
}
private boolean isRight(int startIdx) {
for (int i = 0; i < len; i++) {
char c = ss[(i + startIdx) % len];
if (c == '[' || c == '{' || c == '(') {
stack.push(c);
continue;
}
if (stack.isEmpty()) return false;
if (stack.peek() == getOpp(c)) stack.pop();
else return false;
}
if (stack.size() == 0) return true;
return false;
}
private char getOpp(char c) {
if (c == ']') return '[';
if (c == '}') return '{';
return '(';
}
}