본문 바로가기
코딩테스트

[파이썬] 키패드 누르기 - 2020 카카오 인턴십 [CODING TEST #9]

by ALTERww 2022. 7. 20.
320x100

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

 

 

numbers 리스트를 돌면서 실시간으로 두 개의 엄지손가락 위치를 저장한다.

거리를 어떻게 비교해야하지? 고민을 좀 많이 했는데, 각 리스트의 [0]은 x, [1]은 y좌표를 의미하니

각 좌표 차이에 절댓값 abs()를 씌우고 더하면 거리가 된다! 이 값을 비교하여 더 짧은 쪽 손가락을 사용하게 했다.

 

def solution(numbers, hand):
    answer = ''
    keypad = {1:[0,0], 2:[0,1], 3:[0,2],
             4:[1,0], 5:[1,1], 6:[1,2],
             7:[2,0], 8:[2,1], 9:[2,2],
             '*':[3,0], 0:[3,1], '#':[3,2]}
    left_loc, right_loc = keypad['*'], keypad['#']
    
    for number in numbers:
        if number in [1,4,7]:
            answer += 'L'
            left_loc = keypad[number]
        elif number in [3,6,9]:
            answer += 'R'
            right_loc = keypad[number]
            
        else:
            
            if abs(keypad[number][0] - left_loc[0]) + abs(keypad[number][1] - left_loc[1])  > abs(keypad[number][0] - right_loc[0]) + abs(keypad[number][1] - right_loc[1]):
                answer += 'R'
                right_loc = keypad[number] 
            elif abs(keypad[number][0] - left_loc[0]) + abs(keypad[number][1] - left_loc[1]) < abs(keypad[number][0] - right_loc[0]) + abs(keypad[number][1] - right_loc[1]):
                answer += 'L'
                left_loc = keypad[number] 
            
            else:
                if hand == 'left':
                    answer += 'L'
                    left_loc = keypad[number] 
                else:
                    answer += 'R'
                    right_loc = keypad[number] 
    return answer

댓글