키패드 누르기

Seogyu Gim·2020년 12월 8일
0

코딩테스트

목록 보기
38/47
def get_dist(a, b, phone):
    a_x, a_y, b_x, b_y = 0, 0, 0, 0
    for i, p in enumerate(phone):
        if p.count(a):
            a_x = i
            a_y = p.index(a)
        if p.count(b):
            b_x = i
            b_y = p.index(b)
        if a_x and a_y and b_x and b_y:
            break
    return abs(a_x - b_x) + abs(a_y - b_y) # 문제에서 암시한 좌표간의 거리 도출 식

def solution(numbers, hand):
    answer = ''
    phone = [
        [1,2,3],
        [4,5,6],
        [7,8,9],
        [10,0,12],
    ]
    left = 10
    right = 12
    for i in range(len(numbers)):
        if numbers[i] in (1,4,7): # 1,4,7은 왼손
            answer += 'L'
            left = numbers[i]
        elif numbers[i] in (3,6,9): # 3,6,9는 오른손
            answer += 'R'
            right = numbers[i]
        else: 
            r_dist = get_dist(left, numbers[i], phone) # 오른손에서 누를 번호간의 거리
            l_dist = get_dist(right, numbers[i], phone) # 왼손에서 누를 번호간의 거리
            if r_dist > l_dist:
                answer += 'R'
                right = numbers[i]
            elif r_dist < l_dist:
                answer += 'L'
                left = numbers[i]
            else:
                if hand == 'right':
                    answer += 'R'
                    right = numbers[i]
                else:
                    answer += 'L'
                    left = numbers[i]
    return answer
profile
의미 있는 일을 하고싶은 개발자

0개의 댓글