[프로그래머스/파이썬] Level 1 키패드 누르기

bye9·2021년 3월 27일
0

알고리즘(코테)

목록 보기
98/130

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


알고리즘 분류

  • 구현

문제풀이

숫자를 왼손 엄지손가락으로 누른 경우 L 추가와 함께 그 숫자의 인덱스(left)를 계속해서 갱신해준다.

오른손으로 누른 경우 마찬가지이다.

거리를 계산해서 가까운 손가락으로 누를 수 있도록 해준다.

소스코드

def solution(numbers, hand):
    keypad=[[1,2,3],[4,5,6],[7,8,9],["*",0,"#"]]
    result=[]
    left,right=(3,0),(3,2)
    
    def find_index(value):
        for i in range(4):
            for j in range(3):
                if keypad[i][j]==value:
                    return (i,j)

    for number in numbers:
        if number in (1,4,7):
            result.append("L")
            left=find_index(number)
        elif number in (3,6,9):
            result.append("R")
            right=find_index(number)
        else:
            x,y=find_index(number)
            left_x,left_y=left
            right_x,right_y=right
            
            left_dis=abs(left_x-x)+abs(left_y-y)
            right_dis=abs(right_x-x)+abs(right_y-y)
            if left_dis<right_dis:
                result.append("L")
                left=find_index(number)
            elif left_dis>right_dis:
                result.append("R")
                right=find_index(number)
            else:
                if hand=="left":
                    result.append("L")
                    left=find_index(number)
                else:
                    result.append("R")
                    right=find_index(number)
                    
    return ("".join(result))

0개의 댓글