class Solution {
public int solution(String name) {
int answer = 0;
// 좌우 이동 최소값
int move = name.length() - 1;
for(int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
// 위/아래 이동 계산
answer += Math.min(c - 'A', 'Z' - c + 1);
int next = i + 1;
while(next < name.length() && name.charAt(next) == 'A') next++;
// 좌우 이동 최소값 갱신(예: AAAABBA)
move = Math.min(move, i+name.length() - next + Math.min(i, name.length() - next));
}
answer += move;
return answer;
}
}
[핵심코드]
위/아래 조작(알파뱃 조작)
Math.min(c-'A', 'Z'-c+1)c - 'A': 위로 이동 (A → B 방향)'Z' - c + 1: 아래로 이동 (A → Z 방향)while문의 역할: 연속된 A 구간의 끝 위치(next) 찾기
커서 이동 최소화
move = Math.min(
move,
i + name.length() - next + Math.min(i, name.length() - next)
);
name.length() - next 뒤쪽 남은 거리Math.min(i, name.length() - next) 방향 전환 비용 최소 선택