[프로그래머스/Python] - Lv2 / 조이스틱

Chooooo·2023년 3월 3일
0
post-thumbnail

조이스틱

level2-그리디-조이스틱

from collections import deque
def solution(name):
    res = 0
    
    #기본 최소 좌우 이동은 길이 -1
    min_move = len(name) -1
    
    for idx, word in enumerate(name):
        caseA = ord(word) - ord("A")
        caseB = ord("Z") - ord(word) + 1#(A->Z가는거 1)
        res += min(caseA, caseB)
        
        #해당 알파벳 다음부터 연속된 A문자열 찾기
        next = idx+1 #다음 문자열부터...
        while next < len(name) and name[next] == "A":
            next += 1
        #next가 연속된 A를 건너뛰고 나오는 인덱스
        
        #기존 움직임, 연속된 A의 왼쪽 시작방식, 연속된 A의 오른쪽 시작방식 비교해서 갱신하기
        #연속된 A의 왼쪽 시작 방식
        tempA = 2*idx + len(name) - next #왔던 길이라 *2
        tempB = idx + 2*(len(name) - next)
        min_move = min(min_move, tempA, tempB)
    res += min_move
    print(res)
    return res
        

코멘트

굉장히 어려웠다. 결국 연속된 A의 개수가 군데군데 있을 수도 있기에... 고려해야할 것은 해당 위치까지의 최단거리 + 해당 알파벳 변경횟수 이게 핵심인제 A의 위치마다 이제 계산을 해줘야 한다.
매번 인덱스마다 계산을 해주는 것이 베스트라고 생각했다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글