[프로그래머스] 조이스틱 /파이썬 /Python /탐욕법(Greedy)
Algorithm/Programmers

[프로그래머스] 조이스틱 /파이썬 /Python /탐욕법(Greedy)

728x90
반응형

💡solutions )

💬 로직 크게 두 가지 => 상하로 최소 거리 구해서 알파벳 바꾸기 / 좌우로 최소 거리 구해서 방향 정한 후 이동하기 

💬 change 배열에는 각 알파벳마다 상하 조정 중 min값으로 최소 횟수를 담아두기

💬 idx 0번 부터 시작해서 좌우 이동 횟수를 answer에 더해주기

💬 좌우 방향 전환 시에는 바꿔야하는 알파벳이 나오기까지의 좌우 거리를 구하고, 그 중 최소값이 되는 방향으로 전환한다.

💬 모든 알파벳이 조정된 경우(change의 sum이 0일 때) -> 결과값 반환

 

🎫code )

def solution(name):
    # 상하 조정으로 알파벳 바꾸기 
    change = [min(ord(i) - ord('A'), ord('Z') - ord(i) + 1) for i in name]
    idx = 0
    answer = 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

 

📌 description )

문제출처 : programmers.co.kr/learn/courses/30/lessons/42860?language=python3

 

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

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

programmers.co.kr

 

문제 설명
조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다.
ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA

조이스틱을 각 방향으로 움직이면 아래와 같습니다.
예를 들어 아래의 방법으로 JAZ를 만들 수 있습니다.
만들고자 하는 이름 name이 매개변수로 주어질 때,
이름에 대해 조이스틱 조작 횟수의 최솟값을 return 하도록
solution 함수를 만드세요.


제한 사항
name은 알파벳 대문자로만 이루어져 있습니다.
name의 길이는 1 이상 20 이하입니다.

입출력 예


※ 공지 - 2019년 2월 28일 테스트케이스가 추가되었습니다.

 

반응형