본문 바로가기

TIL/Algorithm

[프로그래머스] 키패드 누르기(easy, kakao)

반응형

말그대로 구현을 하면된다. 다만 여기서 거리의 대한 개념이 나오는데 다음문장을 유심히 읽어야한다

"엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다."

즉, 여기서 거리를 계산할때 단순히 좌표와 좌표사이의 거리(대각선)이 아니고, 좌표간의 이동거리를 계산해야한다.

 

그래서 난 distance라는 함수를 선언하고 좌표 거리를 계산을 return하였다.

from math import sqrt
def distance(arr1, arr2):
    return abs(arr1[0]-arr2[0]) + abs(arr1[1]-arr2[1])
def solution(numbers, hand):
    answer = ''
    now_l = [0,0]
    now_r = [0,2]
    
    position = {
        1: [3,0],
        2: [3,1],
        3: [3,2],
        4: [2,0],
        5: [2,1],
        6: [2,2],
        7: [1,0],
        8: [1,1],
        9: [1,2],
        0: [0,1]
    }
    
    for number in numbers:
        if number in (1,4,7):
            answer += 'L'
            now_l = position[number]
            
        elif number in (3,6,9):
            answer += 'R'
            now_r = position[number]
            
        elif number in (2,5,8,0):
            l_distance = distance(now_l, position[number])
            r_distance = distance(now_r, position[number])
            # print(now_l, now_r, number, l_distance, r_distance)
            if l_distance < r_distance:
                answer += 'L'
                now_l = position[number]
            elif l_distance == r_distance:
                if hand == 'right':
                    answer += 'R'
                    now_r = position[number]
                else:
                    answer += 'L'
                    now_l = position[number]
            else:
                answer += 'R'
                now_r = position[number]
    return answer
반응형