[programmers] 조이스틱

https://school.programmers.co.kr/learn/courses/30/lessons/42860

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

        // 1. 알파벳 바꾸는 조작 횟수 계산
        for (char c : name.toCharArray()) {
            answer += Math.min(c - 'A', 'Z' - c + 1);
        }

        // 2. 커서 이동 최소값 계산
        int minMove = len - 1; // 오른쪽으로만 이동하는 경우

        for (int i = 0; i < len; i++) {
            int next = i + 1;

            // 연속된 'A' 찾기
            while (next < len && name.charAt(next) == 'A') {
                next++;
            }

            // i: 돌아가는 위치
            // next: A가 끝나는 위치
            int move = i + len - next + Math.min(i, len - next);
            minMove = Math.min(minMove, move);
        }

        return answer + minMove;
    }
}



© 2023 Lee. All rights reserved.