문제출처: https://programmers.co.kr/learn/courses/30/lessons/42860
왜 틀렸을까?
처음에 쉽게 접근했으나 꽤 어려웠다. 그리디 알고리즘이라고 해서 현재 커서에서
가장 가까운 글자로 커서를 이동하면 된다고 생각했는데 큰 허점이 있는 것 같았다.
(실수 1. 먼저 왼쪽으로 커서를 이동하는 경우 index를 0,-1,-2...로 바꿔도 괜찮은데 굳이 len(name)-1로 변경하였다.)
의문점 1. 왼쪽 또는 오른쪽으로 커서를 이동하는 비용이 같을 경우
왼쪽이 아닌 오른쪽으로 가는 경우 모든 테스트 케이스를 통과하고 왼쪽으로 가는 경우 모든 테스트 케이스를 통과할 수 없다.
( "ABBAAAAAAAAAB"와 같이 왼쪽으로 커서를 먼저 이동한 뒤 오른쪽으로 이동하는 테스트 케이스는 통과할 수 없다. )
코드
def solution(name): answer = 0 word = ['A'] * len(name) d = [] for i in range( len(name) ): if( word[i] != name[i] ): d.append(i) i = 0 while( len(d) != 0 ): if( word[i] != name[i] ): b = ord(name[i]) - ord('A') f = ord('Z')- ord(name[i]) + 1 if ( b < f): answer += b else: answer += f d.remove(i) if( len(d) != 0 ): count = 0 f,b = i,i while(True): count += 1 if ( f-1 == -1 ): f = len(name)-1 else: f -= 1 if ( b+1 == len(name) ): b = 0 else: b += 1 if( b in d ): answer += count i = b break if( f in d ): answer += count i = f break return answer