코딩테스트 준비(kotlin)/그리디 알고리즘
[kotlin, 프로그래머스] 조이스틱
1chanhue1
2025. 1. 15. 05:10
조이스틱 코틀린 문제풀이
문제 해결 코드 (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
}
}