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

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr



Solution

def middle(key_pad, current_left, current_right, num):
    left = [0,0]
    right = [0,0]
    middle = [0,0]
    for i in range(4):
        for j in range(3):
            if key_pad[i][j] == num:
                middle = [i,j]
            if key_pad[i][j] == current_left:
                left = [i,j]
            if key_pad[i][j] == current_right:
                right = [i,j]
    
    dist_left = abs(middle[0]-left[0]) + abs(middle[1]-left[1])
    dist_right = abs(middle[0]-right[0]) + abs(middle[1]-right[1])
    
    return dist_left, dist_right
                
def solution(numbers, hand):
    key_pad = [[1,2,3], [4,5,6], [7,8,9], [11,0,12]]
    left_number = [1,4,7]
    right_number = [3,6,9]
    answer = ''
    current_left = 11
    current_right = 12
    for i in numbers:
        if i in left_number:
            answer += 'L'
        elif i in right_number:
            answer += 'R'
        else:
            dist_left, dist_right = middle(key_pad, current_left, current_right, i)
            if dist_left > dist_right:
                answer += 'R'
            elif dist_left < dist_right:
                answer += 'L'
            else:
                if hand == 'left':
                    answer += 'L'
                else:
                    answer += 'R'
        if answer[-1] == 'L':
            current_left = i
        else:
            current_right = i
    
    return answer

 

처음에 키패드에서 *을 11로, #을 12로 설정을 해놓고 처음 왼쪽 손가락과 오른쪽 손가락 위치를 각각 11과 12로 위치시켰다. 그리고 numbers를 하나씩 검사하면서 left_number에 있을 경우, right_number에 있을 경우, 가운데에 위치할 경우로 경우를 나눠서 구현했다.가운데(2, 5, 8, 0)일 경우 middle함수에 current_leftcurrent_right, 그리고 가운데에 위치한 해당 번호를 넘겨주고 가까운 손가락을 구했다. numbers의 번호를 하나씩 검사하고 answer에 담은 후 'L'일 경우와 'R'일 경우에 맞게 현재 손가락 위치를 갱신해준다.

 

 


생강강

,