[프로그래머스] 조이스틱_python

lheun·2022년 5월 13일
0

프로그래머스

목록 보기
1/2

📘 level2 조이스틱 (Greedy)

✅ 문제

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

✅ 풀이 방식

  1. up vs down
    A -> Z (up)
    Z -> A (down)

    ex) JAN
    up은 A -> B -> ... -> J
    down은 A -> Z -> Y -> ... -> J
    ord('A') : A의 ASCII값이 나온다

      #up, down
          up = ord(a) - ord('A')
          down = 26 - up
          result += min(up, down)
  2. left (left-right) vs right (right-left)
    1) left (left-right) : 왼쪽끝에서 -> 오른쪽으로 먼저
    2) right (right-left) : 오른쪽끝에서 -> 왼쪽으로 먼저

    1 + 2 + 3에서 2 (돌아오는 화살표)
    2 -> left vs right작은 것

    	min(left_right, right_left)

✅ 코드

def solution(name):
    result = 0
    shift = len(name) - 1

    for idx, a in enumerate(name):
        #up, down
        up = ord(a) - ord('A')
        down = 26 - up
        result += min(up, down)

        #left, right
        # A : -> , <- 비교
        if a == 'A':
            a_idx = idx
            while a_idx < len(name) and name[a_idx] == 'A':
                a_idx += 1

            if idx == 0:
                left_right = 0
            else:
                left_right = idx - 1

            right_left = len(name) - a_idx
            shift = min(shift, left_right + right_left + min(left_right, right_left))

    result += shift
    return result

✅ 참고

https://velog.io/@heering_/그리디-프로그래머스-LV2.-조이스틱

profile
🛫

0개의 댓글