코-딩/프로그래머스

프로그래머스::키패드 누르기(python)

힞뚜루마뚜루 2023. 4. 23. 21:16
728x90

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

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

programmers.co.kr

난이도 : Lv.1

 

풀이
def solution(numbers, hand):
    answer = ''
    
    # L: 왼손, R: 오른손
    L = '*'
    R = '#'
    
    # 키패드
    keypad = {0:(3,1),
              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), 
              '#':(3,2)}
    
    
    for num in numbers:
        if num in [1, 4, 7]:
            answer += 'L'
            L = num
        elif num in [3, 6, 9]:
            answer += 'R'
            R = num
        # 왼손, 오른손 다 누를 수 있는 숫자일 경우
        else :  
            Llen = abs(keypad[num][0] - keypad[L][0]) + abs(keypad[num][1] - keypad[L][1])
            Rlen = abs(keypad[num][0] - keypad[R][0]) + abs(keypad[num][1] - keypad[R][1])
            # 거리가 짧은 쪽
            if Llen < Rlen:
                answer += 'L'
                L = num
            elif Llen > Rlen:
                answer += 'R'
                R = num
            # 거리가 동일한 경우
            else:
                if hand == 'left':
                    answer += 'L'
                    L = num
                else : 
                    answer += 'R'
                    R = num
                        
    return answer

처음엔 가운데 라인은 인접한 손가락으로 누르라는 말을 보고 DFS인가 했다가, 레벨1 이라는 걸 상기하고 단순하게 거리 계산만 하기로 했다.

처음 모든 키패드의 위치 정보를 초기 세팅하고 주어진 숫자를 지나갈 때마다 왼손, 오른손 정보에 그 숫자를 저장한다.

[1,4,7], [3,6,9]는 문제에 나와있는 조건으로 움직여주고 가운데 라인은 현재 위치에서 거리 계산해서 가까운 쪽 손을 움직인다.

 

728x90