Haribo ML, AI, MATH, Algorithm

키패드 누르기


2020 카카오 인턴십

키패드 누르기 문제 바로가기

코드

def solution(numbers, hand):
    results = []
    left = 10
    right = 12

    for number in numbers :
        if number in [1, 4, 7] :
            results.append('L')
            left = number
        elif number in [3, 6, 9] :
            results.append('R')
            right = number
        else : # 2, 5, 8, 0의 경우 거리 계산
            if number == 0: number = 11
            q_l, r_l = divmod(left-1, 3) # 왼손 숫자의 좌표
            q_r, r_r = divmod(right-1, 3) # 오른손 숫자의 좌표
            q_n, r_n = divmod(number-1, 3) # 현재 숫자의 좌표
						
            if abs(q_n - q_r) + abs(r_n - r_r) > abs(q_n - q_l) + abs(r_n - r_l):
                results.append('L')
                left = number
            elif abs(q_n - q_r) + abs(r_n - r_r) < abs(q_n - q_l) + abs(r_n - r_l) :
                results.append('R')
                right = number
            else : # 거리가 같은 경우
                if hand == 'right' :
                    results.append('R')
                    right = number
                else :
                    results.append('L')
                    left = number
    return ''.join(results)

코드 핵심

Mod 연산을 통해 각 숫자별 2차원 좌표를 구할 수 있음.

좌표를 통해 어느손이 가까운지 계산 가능.

  • 대신 * = 10, 0 = 11, # = 12 로 치환
number = 3*Quotient + Remainder + 1 
ex) 7 = 3 * 2 + 0 + 1 => 좌표 (2, 0)

키패드 number의 좌표는 [Quotient, Remainder]


Similar Posts

이전 포스트 수식 최대화

다음 포스트 가사 검색

Comments