[Level2] 조이스틱

Quesuemon·2021년 3월 25일
0

코딩테스트 준비

목록 보기
9/111

🛠 문제

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


👩🏻‍💻 해결 방법

조이스틱을 위, 아래로 움직이는 것 중 최소를 구하는 것은 ord()를 통해 쉽게 해결할 수 있었다
그리고 idx를 통해 문자열에 하나씩 접근하며, answer에 change[idx] 값을 저장해주고, change[idx] = 0을 통해 변환된 문자열을 처리해주었다
만약 sum(change) == 0이면 더 이상 변환할 문자가 없으므로 return을 해주었다
문제는 조이스틱을 좌, 우로 움직이는 것이었는데,
현재 idx로부터 변환이 필요한 알파벳(change[idx] != 0)이 나올 때까지 while문을 돌려 주고 left, right 값을 비교하여 최솟값을 idx와 answer에 더해주는 과정을 통해 구할 수 있었다

소스 코드

def solution(name):
    answer = 0
    change = [min(ord(i)-ord('A'), ord('Z')-ord(i)+1) for i in name]
    idx = 0
    
    while True:
        answer += change[idx]
        change[idx] = 0
        if sum(change) == 0:
            return answer
        
        left, right = 1, 1
        while change[idx - left] == 0:
            left += 1
        while change[idx + right] == 0:
            right += 1
        
        answer += left if left < right else right
        idx += -left if left < right else right

0개의 댓글