def solution(name):
minimum_move = [min(ord(i) - ord('A'), ord('Z') - ord(i) + 1) for i in name]
i, answer = 0, 0
while True:
answer += minimum_move[i]
minimum_move[i] = 0
if sum(minimum_move) == 0:
break
l, r = 1, 1
while minimum_move[i - l] == 0:
l += 1
while minimum_move[i + r] == 0:
r += 1
answer += l if l < r else r
i += -l if l < r else r
return answer
print(solution(input()))
일단 아스키코드 ord함수를 이용해 A부터 Z까지 해당 문자를 오름차순/내림차순 중 빠른 루트를 선택한다.
모든 문자들의 필요 횟수를 리스트에 담아둔 후 이동할 때 마다 해당 루트 수를 0으로 만든다(잔여이동횟수 느낌)
문제는 무조건 0에서 끝 까지 가는게아니라 가다가 중간에 되돌아 가는게 더 빠를 경우도 있다는 것이다.
이를 위해 left와 right를 각각 구하여 먼저 도달하는 수를 정답에 더해주면 된다.
'코딩 테스트 (Coding Test)' 카테고리의 다른 글
[프로그래머스] 햄버거 만들기 (0) | 2023.01.06 |
---|---|
[프로그래머스] 푸드 파이트 대회 (0) | 2023.01.05 |
[프로그래머스] 과일 장수 (0) | 2023.01.05 |
[프로그래머스] 기사단원의 무기 (0) | 2023.01.05 |
[프로그래머스] 그리디 체육복 파이썬 문제풀이 (0) | 2021.12.24 |