Data Analyst KIM

[프로그래머스Lv1] 키패드 누르기(파이썬) 본문

데이터 분석/Coding Test

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

김두연 2023. 8. 16. 22:26
반응형
 

프로그래머스

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

programmers.co.kr

 

이 문제를 풀기 위해서는 현재 눌린 곳의 좌표를 표시하는 것이 좋아보였다.

그래서 dic이라는 키패드의 좌표를 만들었다.

거리가 같을 경우에는 hand와 동일

거리가 다를 경우에는 가까운 손으로 눌리도록 코딩

 

난이도가 그렇게 어렵지는 않았지만 시간은 조금 걸린 문제였다!!!

 

def solution(numbers, hand):
    answer = ''  
    dic = {1: [0, 3], 2: [1, 3], 3: [2, 3],
           4: [0, 2], 5: [1, 2], 6: [2, 2],
           7: [0, 1], 8: [1, 1], 9: [2, 1],
          '*':[0, 0], 0: [1, 0], '#': [2, 0]}
    
    
    L_start = dic['*']
    R_start = dic['#']
    
    for i in numbers :
        now = dic[i]
        if i in [1,4,7] :
            answer += 'L'
            L_start = now
        elif i in [3,6,9] :
            answer += 'R'
            R_start = now
        elif i in [0,2,5,8] :
            # 좌표 거리 구하기
            L_dis = abs(L_start[0]-dic[i][0])+abs(L_start[1]-dic[i][1])
            R_dis = abs(R_start[0]-dic[0][0])+abs(R_start[1]-dic[i][1])
            
            # 왼손이 가까울 경우
            if L_dis < R_dis :
                answer += 'L'
                L_start = now
            
            elif L_dis > R_dis :
                answer += 'R'
                R_start = now 
            
            else :
                if hand == 'left' :
                    answer += 'L'
                    L_start = now
                else :
                    answer += 'R'
                    R_start = now
    return answer

 

 

반응형