본문 바로가기
Python/알고리즘문제

[프로그래머스][탐욕법] 조이스틱

by 붕어사랑 티스토리 2021. 4. 2.
반응형

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

 

코딩테스트 연습 - 조이스틱

조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다

programmers.co.kr

해결방법

글자를 바꿔야할 문자중 현재커서에 가장 가까운 곳을 선택하며 글자를 바꿔나가면 된다.

 

가장 가까운곳을 구하는 방법은 heapq를 이용하였다.

 

import heapq
def solution(name):
    length = len(name)
    cursor = 0
    answer = 0
    currentName = ['A'] * length
    while currentName != name : 
        q = []
        for i in range(length):
            if currentName[i] != name[i]:
                heapq.heappush(q,[min(abs(cursor-i), length - abs(cursor-i)), i])
                print(q)
        if q:
            cursor = q[0][1]
            answer += q[0][0]
            answer += min(ord(name[cursor]) - ord('A'), ord('Z') + 1 - ord(name[cursor]))
            currentName[cursor] = name[cursor]
        else:
            break

    
    return answer

 

코드 설명

 

min(abs(cursor-i), length - abs(cursor-i))

커서를 오른쪽으로 움직여서 가거나 왼쪽으로 움직여서 가는것중 짧은걸 의미

 

min(ord(name[cursor]) - ord('A'), ord('Z') + 1 - ord(name[cursor]))

글자를 위로 또는 아래로 움직여 가장 횟수가 적은 방법 선택

 

 

 

 

커서 움직일때 왼쪽, 오른쪽중 가장 가까이 있는걸 선택

문자를 바꿀때 위 아래로 바꾸는것중 횟수가 가장 적은걸 선택

반응형

댓글