[Algorithm🧬] 키패드 누르기

또상·2021년 11월 22일
0

Algorithm

목록 보기
5/133
post-thumbnail

문제 / 풀이.py

코테를 응시해서 그 날 풀었던 단 한문제라...... 기억하고 있었다. 그 때는 거리 계산을 같은 세로 줄에 있으면... 아니면.. 이런 식으로 분기를 더 복잡하게 했었는데, 이번엔 좀 더 깔끔하게 한 것 같다.

# 어떤 손으로 선택할지 반환해주는 함수.
def which_hand(left_loca, right_loca, end, main_hand):
    # 거리가 짧은쪽을 반환하고
    if distance(left_loca, end) < distance(right_loca, end):
        return "L"
    elif distance(left_loca, end) > distance(right_loca, end):
        return "R"
    # 거리가 같으면, 주 사용 손을 반환.
    else:
        if main_hand == "left":
            return "L"
        else:
            return "R"

# 현재 위치와 눌러야 할 위치를 넣으면 거리를 계산해주는 함수.
def distance(start, end):
    # 1 2 3 이 x축 0 1 2 로
    # 1 4 7 이 y축 0 1 2 3 으로 맵핑.
    start_x = (start+2) % 3
    start_y = int((start - 1) / 3)
    
    end_x = (end+2) % 3
    end_y = int((end-1) / 3)
    
    # 거리가 칸 기준이므로 이렇게 거리를 구한다.
    dist = abs(start_x - end_x) + abs(start_y - end_y)
    return dist
    
    
def solution(numbers, hand):
    answer = ''
    left_loca = 10
    right_loca = 12
    
    for num in numbers:
        if num == 0:
            num = 11
        
        # 1, 4, 7 이면 left
        if num % 3 == 1:
            left_loca = num
            answer += "L"
        
        # 3, 6, 9 이면 right
        elif num % 3 == 0:
            right_loca = num
            answer += "R"
            
        # 2, 5, 8, 0 이면 계산 후에 결정.
        else:
            this_hand = which_hand(left_loca, right_loca, num, hand)
            # 손의 위치가 움직여야해서 아래 식도 추가.
            if this_hand == "L":
                left_loca = num
            else:
                right_loca = num
            answer += this_hand
    
    
    return answer
profile
0년차 iOS 개발자입니다.

0개의 댓글