https://school.programmers.co.kr/learn/courses/30/lessons/42860
문제는 이곳에서 참조 바란다.
def solution(name):
if set(name) == {'A'}: # 모든 글자가 A일 경우 움직일 필요 없음
return 0
answer = float('inf') # 최소 이동 횟수 초기화
for i in range(len(name) // 2): # 반 이상 움직일 필요 없음
left = name[-i:] + name[:-i] # 왼쪽으로 i칸 이동한 문자열
right = name[i:] + name[:i] # 오른쪽으로 i칸 이동한 문자열
# 더 적은 이동 횟수를 구하기 위해 left, right 문자열 중 A로 끝나는 부분을 제거
for n in [left, right[0] + right[:0:-1]]:
while n and n[-1] == 'A': # 문자열 n의 마지막 문자가 A일 경우 제거
n = n[:-1]
print(n)
# row_move: 알파벳 변경을 위한 이동 횟수
row_move = i + len(n) - 1
# col_move: 상하 이동 횟수
col_move = 0
for c in map(ord, n): # 문자열 n의 각 문자에 대해
col_move += min(c - 65, 91 - c) # 상하 이동 횟수 계산
# 전체 이동 횟수 구하기
answer = min(answer, row_move + col_move)
return answer