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

HYEJIN·2022년 5월 25일
0

프로그래머스

목록 보기
1/4

카카오인턴 키패드누르기

접근 방법

  • 딕셔너리로 각 키패드의 위치를 활용함
  • 1,4,7(왼)의경우와 3,6,9(오)의 경우의 3으로 나눴을때의 패턴 활용
  • 위의 경우가 아니라면, abs 절대값을 활용하여 거리 계산 후 거리가 짧은 쪽 손이 위치
    만약 거리가 같다면 왼손잡이, 오른손 잡이에 따라 나뉘어지게됨
    >> 처음에 hand 매개변수가 L,R로 들어오는줄 알았는데 left, right로 들어오니 주의!

내 풀이

def solution(numbers, hand):
    answer = ''
    dict={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)}
    left = (3, 0)
    right = (3, 2)

    for i in numbers:
        # 1, 4, 7 일때
        if i%3==1:
            answer+='L'
            left = dict[i]

        # 3, 6, 9 일때 / 0도포함됨으로 제외 
        elif i%3==0 and i!=0:
            answer+='R'
            right = dict[i]

        # 두 경우가 아닐경우 ( 거리 계산 필요 )
        else:
            # 현재 i의 위치
            cur= dict[i]

            # 현재 i의 위치로부터 각각 left, right가 있는 위치까지 거리 계산
            left_dis = abs(cur[0]-left[0])+abs(cur[1]-left[1])
            right_dis = abs(cur[0]-right[0])+abs(cur[1]-right[1])

            if left_dis < right_dis:
                answer+='L'
                left = dict[i]
            elif left_dis > right_dis:
                answer += 'R'
                right = dict[i]
            else:
                if hand=='left':
                    answer += 'L'
                    left = dict[i]
                else:
                    answer += 'R'
                    right = dict[i]
    return answer

0개의 댓글