몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 2] 조이스틱 {언어 : Python} [다시 풀어 보기] 본문

알고리즘/다시 풀어 보기

프로그래머스 [Lv. 2] 조이스틱 {언어 : Python} [다시 풀어 보기]

스위태니 2024. 5. 17. 22:55

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드

def solution(name):
    def move_cost(char):
        return min(ord(char) - ord('A'), ord('Z') - ord(char) + 1)
    
    lenN = len(name)
    answer = 0
    visited = [0] * lenN
    
    # 각 위치의 변경 비용을 미리 계산
    for char in name:
        answer += move_cost(char)
    
    # 커서 이동 비용 계산
    min_move = lenN - 1  # 좌우 이동만 할 경우 최대 이동 횟수
    for i in range(lenN):
        next_idx = i + 1
        while next_idx < lenN and name[next_idx] == 'A':
            next_idx += 1
        
        distance = min(i, lenN - next_idx) + i + lenN - next_idx
        min_move = min(min_move, distance)
    
    answer += min_move
    return answer

풀이 방법

  1. 각 위치별로 알파벳 변경시 소모되는 값을 구해서 answer에 더한다.
  2. i부터 끝까지 최소 이동할 수 있는 거리를 구해서 answer에 더한다.

느낀점

  • 그리디는 여전히 어렵다고 느껴져서 다시 풀어 보면 좋을 것 같다.