조이스틱
코딩테스트 연습 > 탐욕법 > 조이스틱
https://programmers.co.kr/learn/courses/30/lessons/42860
(len(name)-1)
와 역방향 최소 이동 수2 * 현재 위치+(len(name))-가까운 'A'의 위치
의 최소값을 구해 min_move를 갱신한다.ord(n)-ord('A'),ord('Z')-ord(n)
의 최소값을 구해 min_count에 추가한다.# Input values
name = 'JEROEN'
# Set initial value : answer = min_count + min_move
min_count= 0
min_move = len(name)-1
for i,n in enumerate(name):
next_ = i+1 # move to find position
while next_ < len(name) and name[next_] == 'A':
next_+=1 # Go to the next position
min_count+= min(ord(n)-ord('A'),ord('Z')-ord(n)+1) # Select minimun transform
min_move = min(min_move,2*i+len(name)-next_) # Select minimum move
min_count+min_move
역방향에 대한 고려방법이 어려워 다른분들의 풀이를 최대한 참고하여 작성했습니다.
def solution(name):
min_count= 0
min_move = len(name)-1
for i,n in enumerate(name):
next_ = i+1
while next_ < len(name) and name[next_] == 'A':
next_+=1
min_count+= min(ord(n)-ord('A'),ord('Z')-ord(n)+1)
min_move = min(min_move,2*i+len(name)-next_)
return min_count+min_move