프로그래머스 풀이

프로그래머스 키패드 누르기(파이썬)

ag2개발자 2022. 2. 10. 14:06

좌표로 번호판을 생각한다는게 어려웠다. 무엇보다 꼼꼼히 구현을 해야하는 문제

def solution(numbers, hand):
    answer = ''
    dic = {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],\
          '*':[3,0],0:[3,1],'#':[3,2]}      #좌표별로 나누기
    left_n = dic['*']       #왼손 시작
    right_n = dic['#']      #오른손 시작
    for i in numbers:
        now = dic[i]        #가고자 하는 위치
        if i ==1 or i==4 or i == 7:
            answer+='L'
            left_n =now     #무조건 왼손
        elif i ==3 or i == 6 or i == 9:
            answer+= "R"
            right_n= now        #무조건 오른손
        else:       #가운데
            left_d = 0      #거리는 0으로 초기화
            right_d =0
            # print("left_n, right_n", left_n,right_n)
            for a, b, c, in zip(left_n,right_n,now):    #거리 계산
                left_d +=abs(a-c)
                right_d +=abs(b-c)
                # print(i, a,b,c)
            if left_d<right_d:      #왼쪽이 더 가까우면
                answer+= "L"
                left_n=now
                print(i, "left_n", left_n)
            elif right_d<left_d:       #오른쪽이 더 가까우면
                answer+= "R"
                right_n = now
            else:       #거리가 같으면
                if hand == "left":
                    answer+= "L"
                    left_n = now
                elif hand == "right":
                    answer+= "R"
                    right_n = now
    return answer