[프로그래머스 파이썬] 조이스틱

일단 해볼게·2023년 1월 20일
0

프로그래머스

목록 보기
8/106

https://school.programmers.co.kr/learn/courses/30/lessons/42860

def solution(name):

	# 조이스틱 조작 횟수 
    answer = 0
    
    # 기본 최소 좌우이동 횟수는 길이 - 1
    min_move = len(name) - 1
    
    for i, char in enumerate(name):
        # i = 인덱스, char = 문자열
    	# 해당 알파벳 변경 최솟값 추가
        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, # A가 없을 경우
        i + i + len(name) - next, 
        i + 2 * (len(name) - next)])
        
    # 알파벳 변경(상하이동) 횟수에 좌우이동 횟수 추가
    answer += min_move
    return answer

print(solution("JEROEN"))

테스트케이스 일부분만 맞은 풀이

def solution(name):
    alpha = ['A', 'B', 'C', 'D','E', 'F','G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'
            , 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
    ]
    control = 0
    joystick_idx = 0
    
    for n in range(len(name)):
        # A일 때
        if name[n] == alpha[0]:
            # 커서 왼쪽으로 이동한게 커서 오른쪽으로 이동한거 보다 적게 움직일 때
            if name.rfind(name[n]) > name.find(name[n]):
                control += name.rfind(n) - 1
                
            
            # 커서 오른쪽으로 이동

            continue
        
        # 방향 키 위 or 아래 방향 조절// 반 나눠서 계산
        alpha_idx = alpha.index(name[n])
        if alpha_idx + 1 > 13: # 방향키 아래
            control += 26 - alpha_idx
            control += 1 # 오른쪽으로 한칸 이동
        elif alpha_idx + 1 <= 13: # 방향키 위
            control += alpha_idx
            control += 1 # 오른쪽으로 한칸 이동
        
    
    return control - 1

커서를 좌우로 이동하는걸 제대로 처리하지 못했다. rfind를 이용해도 같은 알파벳이면 원하는 답이 나오지 않았다.

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글