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

 

def solution(numbers, hand):
    answer = ""
    # 키패드를 dict으로 구현
    phone = {1:(1,1), 2:(1,2), 3:(1,3), 4:(2,1), 5:(2,2), 6:(2,3),
            7:(3,1), 8:(3,2), 9:(3,3), '*':(4,1), 0:(4,2), '#':(4,3)}
    # 시작점
    l_point, r_point = '*', '#'
    
    for i in numbers:
        if i in [1,4,7]:
            answer += 'L'
            l_point = i
        elif i in [3,6,9]:
            answer += 'R'
            r_point = i
        else: # 거리를 계산해줌
            l_far = abs(phone[i][0] - phone[l_point][0]) + abs(phone[i][1] - phone[l_point][1])
            r_far = abs(phone[i][0] - phone[r_point][0]) + abs(phone[i][1] - phone[r_point][1])
            if l_far < r_far:
                answer += 'L'
                l_point = i
            elif l_far > r_far:
                answer += 'R'
                r_point = i
            else:
                if hand == 'left':
                    answer += 'L'
                    l_point = i
                else:
                    answer += 'R'
                    r_point = i
    return answer

 

문제에 맞추어 조건을 다 구현함

+ Recent posts