[Python][프로그래머스][Level2] 조이스틱

[Python][프로그래머스][Level2] 조이스틱

코드

def solution(name):
    answer = 0
    alpha=dict()
    for num in range(ord('A'),ord('Z')+1):
        alpha[chr(num)]=num-65
    for n in name:
        answer+=min(alpha[n]-alpha['A'],26-alpha[n])
    
    check=[]
    for idx,n in enumerate(name):
        if n!='A':
            check.append(idx)
    
    cnt=ans=0
    while check:
        if cnt in check:
            check.remove(cnt)
        check.sort(key=lambda x: (min(abs(cnt-x),len(name)-abs(cnt-x)),x),reverse=True)
        ans+=min(abs(cnt-check[-1]),len(name)-abs(cnt-check[-1]))
        cnt=check.pop()
    
    return answer+ans

배열의 각 인덱스 마다 A로 만들때 필요한 조작횟수를 저장한다.

그리고 첫번째 위치부터 A가 아닌 위치중에 가장 가까운 곳을 골라서

이동하는 방식으로 풀었다.

Discussion and feedback