조이스틱을 위, 아래로 움직이는 것 중 최소를 구하는 것은 ord()를 통해 쉽게 해결할 수 있었다
그리고 idx를 통해 문자열에 하나씩 접근하며, answer에 change[idx] 값을 저장해주고, change[idx] = 0을 통해 변환된 문자열을 처리해주었다
만약 sum(change) == 0이면 더 이상 변환할 문자가 없으므로 return을 해주었다
문제는 조이스틱을 좌, 우로 움직이는 것이었는데,
현재 idx로부터 변환이 필요한 알파벳(change[idx] != 0)이 나올 때까지 while문을 돌려 주고 left, right 값을 비교하여 최솟값을 idx와 answer에 더해주는 과정을 통해 구할 수 있었다
소스 코드
def solution(name):
answer = 0
change = [min(ord(i)-ord('A'), ord('Z')-ord(i)+1) for i in name]
idx = 0
while True:
answer += change[idx]
change[idx] = 0
if sum(change) == 0:
return answer
left, right = 1, 1
while change[idx - left] == 0:
left += 1
while change[idx + right] == 0:
right += 1
answer += left if left < right else right
idx += -left if left < right else right