프로그래머스 코딩테스트 고득점 Kit_탐욕법(Greedy)_조이스틱

Minhee kang·2021년 10월 12일
0

문제 보러 가기 👈 클릭!

💡 풀이

✔ 풀이 방법

1) ^ v 방향 조작
^으로 이동했을 경우 조작 횟수와 v으로 이동했을 경우 조작 횟수를 비교하여 작은값을 갖는 경우를 선택

2) < > 방향 조작
현재 위치에서 왼쪽 오른쪽으로 'A'가 아닌 조작이 필요한 문자를 만날때 까지 이동할 때, 더 작은 값을 가지는 방향을 선택

구현 코드👇

def solution(name):
    counts = [min(ord(char)-ord('A'), ord('Z')-ord(char)+1) for char in name]
    
    answer, idx = 0, 0
    while 1:
        answer += counts[idx]
        counts[idx] = 0
        
        if sum(counts) == 0:
            break
            
        left, right = 1, 1 #기본이동 횟수
        while counts[idx - left] == 0:
            left += 1
        while counts[idx + right] == 0:
            right += 1
        answer += left if left < right else right
        idx += -left if left < right else right
        
    return answer

0개의 댓글