https://school.programmers.co.kr/learn/courses/30/lessons/42860
def solution(name):
# 조이스틱 조작 횟수
answer = 0
# 기본 최소 좌우이동 횟수는 길이 - 1
min_move = len(name) - 1
for i, char in enumerate(name):
# i = 인덱스, char = 문자열
# 해당 알파벳 변경 최솟값 추가
answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
# 해당 알파벳 다음부터 연속된 A 문자열 찾기
next = i + 1
while next < len(name) and name[next] == 'A':
next += 1
# 기존, 연속된 A의 왼쪽시작 방식, 연속된 A의 오른쪽시작 방식 비교 및 갱신
min_move = min([min_move, # A가 없을 경우
i + i + len(name) - next,
i + 2 * (len(name) - next)])
# 알파벳 변경(상하이동) 횟수에 좌우이동 횟수 추가
answer += min_move
return answer
print(solution("JEROEN"))
def solution(name):
alpha = ['A', 'B', 'C', 'D','E', 'F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'
, 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
]
control = 0
joystick_idx = 0
for n in range(len(name)):
# A일 때
if name[n] == alpha[0]:
# 커서 왼쪽으로 이동한게 커서 오른쪽으로 이동한거 보다 적게 움직일 때
if name.rfind(name[n]) > name.find(name[n]):
control += name.rfind(n) - 1
# 커서 오른쪽으로 이동
continue
# 방향 키 위 or 아래 방향 조절// 반 나눠서 계산
alpha_idx = alpha.index(name[n])
if alpha_idx + 1 > 13: # 방향키 아래
control += 26 - alpha_idx
control += 1 # 오른쪽으로 한칸 이동
elif alpha_idx + 1 <= 13: # 방향키 위
control += alpha_idx
control += 1 # 오른쪽으로 한칸 이동
return control - 1
커서를 좌우로 이동하는걸 제대로 처리하지 못했다. rfind를 이용해도 같은 알파벳이면 원하는 답이 나오지 않았다.