title: "[프로그래머스] 키패드 누르기 Python 파이썬 해설 (Level 1) - 이도훈"
cleanUrl: "programmers/67256"
description: "프로그래머스 Level 1 문제 [키패드 누르기]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def dist(src, dst):
    position = {
        '*': (3, 0),
        '#': (3, 2),
        '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),
    }
    srcpos = position[src]
    dstpos = position[dst]
    return abs(srcpos[0] - dstpos[0]) + abs(srcpos[1] - dstpos[1])

def solution(numbers, hand):
    numbers = [str(x) for x in numbers]
    left, right = '*', '#'
    answer = []
    for x in numbers:
        if x in '147':
            answer.append('L')
            left = x
        elif x in '369':
            answer.append('R')
            right = x
        else:
            if dist(left, x) < dist(right, x):
                answer.append('L')
                left = x
            elif dist(right, x) < dist(left, x):
                answer.append('R')
                right = x
            else:
                if hand == 'left':
                    answer.append('L')
                    left = x
                else:
                    answer.append('R')
                    right = x
    
    return ''.join(answer)

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges