괄호 회전하기

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