[프로그래머스] 키패드 누르기

섬섬's 개발일지·2022년 2월 15일
0

프로그래머스

목록 보기
19/50

문제

맨 처음 왼손 엄지 손가락은 '*'키패드에 오른손 엄지손가락은 '#' 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.

  • 엄지손가락은 상화좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다.
  • 왼쪽 열의 3개의 숫자 1,4,7을 입력할 때는 왼손 엄지손가락을 사용합니다.
  • 오른쪽 열의 3개의 숫자 3,6,9를 입력할 때는 오른손 엄지손가락을 사용합니다.
  • 가운데 열의 4개의 숫자 2,5,8,0을 입력할 때는 두 엄지 손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다.
    • 만약 두 엄지손가락의 거리가 같다면, 오른손잡이는 오른손 엄지손가락, 왼손잡이는 왼손 엄지손가락을 사용합니다.

순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지 손가락이 왼손인지 오른손인지를 나타내는 연속된 문자열 형태로 return하도록 solution 함수를 완성해주세요.

제한사항

  • numbers 배열의 크기는 1이상 1,000 이하입니다.
  • numbers는 배열 원소의 값은 0 이상 9 이하인 정수입니다.
  • hand는 'left' 또는 'right'입니다.
    • 'left'는 왼손잡이, 'right'는 오른손잡이를 의미합니다.
  • 왼손 엄지손가락을 사용한 경우는 L, 오른손 엄지손가락을 사용한 경우는 R을 순서대로 이어붙여 문자열 형태로 return 해주세요.

코드

def solution(numbers, hand):
    answer = ''
    left,right=[3,0],[3,2]
    loc={
        1:[0,0],2:[0,1],3:[0,2],
        4:[1,0],5:[1,1],6:[1,2],
        7:[2,0],8:[2,1],9:[2,2],
        0:[3,1]
    }
    for number in numbers:
        if number in [1,4,7]:
            answer += 'L'
            left = loc[number]
        elif number in [3,6,9]:
            answer += 'R'
            right = loc[number]
        else:
            next = loc[number]
            leftDis = abs(left[0]-next[0]) + abs(left[1]-next[1])
            rightDis = abs(right[0]-next[0]) + abs(right[1]-next[1])
            if leftDis > rightDis:
                answer += 'R'
                right = next
            elif leftDis < rightDis:
                answer += 'L'
                left = next
            elif hand == 'right':
                answer += 'R'
                right = next
            else:
                answer += 'L'
                left = next
    return answer
profile
섬나라 개발자

0개의 댓글