배고픈 개발자 이야기

[카카오 인턴] 키패드 누르기 본문

알고리즘 문제/PROGRAMMERS

[카카오 인턴] 키패드 누르기

이융희 2021. 7. 31. 14:12
728x90

왼손 엄지와 오른손 엄지로 입력된 번호를 어떻게 누르는지 문자열로 반환하는 문제이다.

 

각 키패드별로 좌표를 생성하고, 초기값을 선언한다.

그리고 규칙에 맞게 왼쪽 버튼은 왼손, 오른손 버튼일때는 오른손으로 입력을 하며

가운데 번호일때만 거리를 구하여 어떤손으로 누를지 정한다, 거리가 같으면 어느손잡이냐에 따라 정하면 끝이다.

 

 

def distance(coord_1, coord_2):
    return abs(coord_1[0]-coord_2[0]) + abs(coord_1[1]-coord_2[1])

def solution(numbers, hand):
    answer = ''
    num_coord = {
        '1' : [0, 3], '2' : [1, 3], '3' : [2, 3],
        '4' : [0, 2], '5' : [1, 2], '6' : [2, 2],
        '7' : [0, 1], '8' : [1, 1], '9' : [2, 1],
        '*' : [0, 0], '0' : [1, 0], '#' : [2, 0]
    }
    left_pos, right_pos = '*', "#"
    
    for num in numbers:
        if num in [1, 4, 7]:
            answer += 'L'
            left_pos = str(num)
        elif num in [3, 6, 9]:
            answer += 'R'
            right_pos = str(num)
        else:
            left_dis = distance(num_coord[left_pos], num_coord[str(num)])
            right_dis = distance(num_coord[right_pos], num_coord[str(num)])
            if left_dis < right_dis:
                answer += 'L'
                left_pos = str(num)
            elif left_dis > right_dis:
                answer += 'R'
                right_pos = str(num)
            else:
                if hand == 'left':
                    answer += 'L'
                    left_pos = str(num)
                else:
                    answer += 'R'
                    right_pos = str(num)
        
    return answer
Comments