

using System;
public class Solution
{
public int solution(string name)
{
// 문자열 길이
int n = name.Length;
// 커서 이동 횟수 (오른쪽으로 끝까지 이동 (n - 1))
int move = n - 1;
// 알파벳 변환 횟수
int answer = 0;
for(int i = 0; i < n; i++)
{
char target = name[i];
// 변환 횟수 구하기
// A에서 Target까지 위로 이동하는게 빠르냐
// Z에서 Target까지 아래로 이동하는게 빠르냐
answer += Math.Min(target - 'A','Z' - target + 1);
// 연속된 'A'가 나오는 경우 체크
int next = i + 1;
while(next < n && name[next] == 'A')
next++;
// 현재까지 계산된 이동 횟수가 더 빠르냐 (move)
// 새로 계산한 횟수가 더 빠르냐 (i+n-next + Math.Min(i,n-next))
// i+n-next : 한 방향으로 이동한 후, 다른 방향으로 이동하는 기본 이동 횟수
// Math.Min(i, n - next): 어느 방향으로 먼저 이동할지 선택하여 추가적인 이동 횟수를 최소화
move = Math.Min(move,i+n-next + Math.Min(i,n-next));
}
return answer + move;
}
}
문제를 해석하는 능력을 길러야할 듯 합니다.