[Python3]프로그래머스_조이스틱

Beanzinu·2022년 1월 15일

코딩테스트

목록 보기
2/42

문제출처: 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
profile
당신을 한 줄로 소개해보세요.

0개의 댓글