본문 바로가기
코딩테스트 준비(kotlin)/그리디 알고리즘

[kotlin, 프로그래머스] 조이스틱

by 1chanhue1 2025. 1. 15.

조이스틱 코틀린 문제풀이

문제 해결 코드 (kotlin) 

class Solution {
    fun solution(name: String): Int {
        val n = name.length // 이름의 길이를 저장

        // 각 문자를 목표 알파벳으로 변경하는 데 필요한 조작 횟수 합산
        val moveCost = name.map { char ->
            val up = char - 'A' // 'A'에서 목표 문자까지 위로 이동한 횟수
            val down = 'Z' - char + 1 // 'Z'에서 역으로 이동한 횟수
            minOf(up, down) // 최소 이동 횟수를 선택
        }.sum()

        // 커서 이동 최소화 계산
        var minMove = n - 1 // 기본적으로 모든 문자를 오른쪽으로만 이동한다고 가정

        for (i in name.indices) { // 각 문자를 기준으로 이동 경로를 계산
            var next = i + 1 // 다음 문자의 인덱스 초기화
            // 연속된 'A' 구간을 탐색하여 건너뜀
            while (next < n && name[next] == 'A') {
                next++
            }
            // 현재 위치에서 앞뒤로 이동하는 경로와 비교하여 최소값 갱신
            val move = i + i + (n - next) // 앞으로 갔다가 뒤로 돌아오는 경로
            minMove = minOf(minMove, move) // 최소 이동값 저장
        }

        // 알파벳 변경 비용과 커서 이동 비용 합산 후 반환
        return moveCost + minMove
    }
}