[ 프로그래머스 ] #42860 : 조이스틱 - JAVA

🔗 조이스틱

class Solution {
    public int solution(String name) {
        int answer=0;
        int len=name.length();

        // 1. 상하 이동 최소화
        for(int i=0;i<len;i++){
            char c=name.charAt(i);
            answer+=Math.min('Z'-c+1,c-'A');
        }

         // 2. 커서 이동 최소화
        int move = len - 1;
        for (int i = 0; i < len; i++) {
            // A를 건너뛴 다음 index
            int next = i + 1;

            // 연속된 A 구간 건너뛰기
            while (next < len &&  // 구간 안에 있고
                   name.charAt(next) == 'A') { //A라면 건너뛰기
                next++;
            }

            // 오른쪽으로 i칸 → 왼쪽으로 len - next칸 (되돌아가기)
            move = Math.min(
                move, 
                i + // 오른쪽 이동
                (len - next) + // A 건너뛴 next 부터 끝까지 이동
                Math.min(i, len - next)// 최소 거리인 곳으로 왕복할 것이므로
            );
        }

        answer += move;
        return answer;

    }
}