조이스틱 코틀린 문제풀이
문제 해결 코드 (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
}
}
'코딩테스트 준비(kotlin) > 그리디 알고리즘' 카테고리의 다른 글
[kotlin] 회의실 배정 (0) | 2025.04.03 |
---|---|
[kotlin 프로그래머스] 큰 수 만들기 (level 2) (0) | 2025.01.08 |
[프로그래머스] 체육복 (kotlin) (0) | 2025.01.08 |
[kotlin] 코틀린 백준 2839번 설탕배달 (0) | 2023.08.15 |