문제 설명
조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다.
ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA
조이스틱을 각 방향으로 움직이면 아래와 같습니다.
▲ - 다음 알파벳
▼ - 이전 알파벳 (A에서 아래쪽으로 이동하면 Z로)
◀ - 커서를 왼쪽으로 이동 (첫 번째 위치에서 왼쪽으로 이동하면 마지막 문자에 커서)
▶ - 커서를 오른쪽으로 이동
예를 들어 아래의 방법으로 "JAZ"를 만들 수 있습니다.
만들고자 하는 이름 name이 매개변수로 주어질 때, 이름에 대해 조이스틱 조작 횟수의 최솟값을 return 하도록 solution 함수를 만드세요.
1) 왼쪽에서 시작해서 오른쪽으로 한방향으로만 이동하는 경우 2) 왼쪽에서 시작해서 오른쪽으로 이동하다가 방향을 바꾸어 왼쪽으로 이동하는 경우
가 있다.def solution(name):
answer = 0
min_left_right = len(name) # 왼쪽에서 오른쪽으로만 이동할 때 좌,우 조작 횟수
next_idx = 0
for idx, char in enumerate(name):
# 위, 아래 조작 횟수의 최솟값 구하기
answer += min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
# 좌, 우 조작 횟수의 최솟값 구하기
next_idx = idx + 1
while next_idx < len(name) and name[next_idx] == 'A':
next_idx += 1 # 현재 위치 이후 연속된 A 다음의 문자를 가리킴
# 한 방향으로만 이동하는 경우와, 오른쪽으로 이동했다가 왼쪽으로 이동하는 경우를 비교
min_left_right = min(min_left_right, idx + idx + len(name) - next_idx)
answer += min_left_right
return answer
테스트 케이스가 추가되어 코드가 통과되지 않네요..!