괄호 회전하기
class Solution {
public static int solution(String s) {
HashMap<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put('}', '{');
map.put(']', '[');
int n = s.length();
s += s; // 원본 문자열 뒤에 원본 문자열 이어 붙이는 테크닉
int answer = 0;
A: for(int i = 0 ; i < n;i ++) {
ArrayDeque<Character> stack = new ArrayDeque<>();
for( int j = i; j<i+n; j++) {
char c = s.charAt(j);
// 해시맵 안에 해당 키가 없다면 열리는 괄호
if(!map.containsKey(c)) {
stack.push(c);
}
else {
// 짝이 맞지 않으면 내부 for문은 종료하고 for문 A로 이동
if(stack.isEmpty() || stack.pop().equals(map.get(c)))
continue A;
}
}
// 3에서 continue 되지 않았고, 스택이 비어있으면 올바른 괄호 문자열
if(stack.isEmpty())
answer++;
}
return answer;
}
}Last updated