[프로그래머스/Python] 탐욕법(그리디) - 조이스틱

Sujin Lee·2022년 5월 10일
0

코딩테스트

목록 보기
34/172
post-thumbnail

  • 나는 이렇게 구현했지만
nums = [ord(list(name)[i]) for i in range(len(list(name)))]
for i in nums:
	if 90 - i > i - 65:
		answer = answer + (i - 65)     
	else:
		answer = answer + (90 - i) + 1 
  • 이렇게 한 줄로 되더라..
move_nums = [min(ord(i) - ord("A"), ord("Z") - ord(i)+1) for i in name]

👩🏻‍🏫 풀이

def solution(name):
    answer = 0
    
    # 기본 최소 좌우이동 횟수는 길이 - 1
    min_move = len(name) - 1
    
    for i, char in enumerate(name):
    	# 해당 알파벳 변경 최솟값 추가
        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, 2 *i + len(name) - next, i + 2 * (len(name) -next)])
        
    # 알파벳 변경(상하이동) 횟수에 좌우이동 횟수 추가
    answer += min_move
    return answer
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글