본문 바로가기

코딩테스트/Python

[프로그래머스] [카카오 인턴] 키패드 누르기

내 코드

def cal(num):
    cnt=0
    while num!=0:
        if num>2:
            num-=3
            cnt+=1
        else:
            num-=1
            cnt+=1
    return cnt     
def solution(numbers, hand):
    answer = ''
    cur_l = 10
    cur_r = 12

    for i in numbers:
        if i == 1 or i==4 or i==7:
            answer+='L'
            cur_l = i
        elif i==3 or i==6 or i==9:
            answer+='R'
            cur_r = i
        else:
            if i==0 : i = 11
            cnt_l = cal(abs(cur_l-i))
            cnt_r = cal(abs(cur_r-i))
            if cnt_l == cnt_r:
                if hand == "left":
                    cur_l = i
                    answer+="L"
                else:
                    cur_r = i
                    answer+="R"
            elif cnt_l < cnt_r:
                cur_l = i
                answer+="L"
            else:
                cur_r = i
                answer+="R"
                
    return answer

ㅋㅋㅋ 완전 길다ㅠㅠ 문제에 나온대로 차례차례 해주었다. *=10,0=11,#=12이렇게 생각하고 현재 숫자에서 누를 숫자까지의 거리를 cal로 계산해준다. 횟수가 더 적은 손으로 누르게 해주었다. 

 

다른사람 코드

def solution(numbers, hand):
    answer = ''
    key_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),
                '*':(3,0),0:(3,1),'#':(3,2)}

    left = [1,4,7]
    right = [3,6,9]
    lhand = '*'
    rhand = '#'
    for i in numbers:
        if i in left:
            answer += 'L'
            lhand = i
        elif i in right:
            answer += 'R'
            rhand = i
        else:
            curPos = key_dict[i]
            lPos = key_dict[lhand]
            rPos = key_dict[rhand]
            ldist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
            rdist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])

            if ldist < rdist:
                answer += 'L'
                lhand = i
            elif ldist > rdist:
                answer += 'R'
                rhand = i
            else:
                if hand == 'left':
                    answer += 'L'
                    lhand = i
                else:
                    answer += 'R'
                    rhand = i

    return answer

이사람은 좌표를 설정하여 풀어주었다!