프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

나의 풀이

  • *과 #을 10, 12라고 생각하면 키패드 영역을 3의 몫,나머지 좌표로 표현할 수 있다.
  • 나머지가 0인 경우 왼손, 2인 경우 오른손으로 처리하면 된다.

def solution(numbers, hand):
    # 현재 손가락 위치
    pos_left = 9
    pos_right = 11
    # ?손잡이 처리
    hand = hand[0].upper()
    answer = ""
    for i in numbers:
        i -= 1
        if i == -1 : i = 10
        # 이동해야할 좌표
        x, y = divmod(i, 3)
        if y == 0:
            pos_left = i
            answer += "L"
        elif y == 2:
            pos_right = i
            answer += "R"
        else:
            x_left, y_left = divmod(pos_left, 3)
            x_right, y_right = divmod(pos_right, 3)
            # 거리 확인
            dis_left = abs(x - x_left) + abs(y - y_left)
            dis_right = abs(x - x_right) + abs(y - y_right)
            
            if dis_left > dis_right:
                answer += "R"
                pos_right = i
            elif dis_left < dis_right:
                answer += "L"
                pos_left = i
            else:
                if hand == "R":
                    pos_right = i
                else:
                    pos_left = i
                answer += hand
            
    return answer