💡코딩테스트/프로그래머스

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

두_두 2023. 2. 7. 10:43

📑 문제

 

프로그래머스

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

programmers.co.kr

📝 풀이

def cal_dist(a,b):
    return abs(a[0]- b[0])  + abs(a[1]-b[1])

def solution(numbers, hand):
    
    arr = []
    for i in range(4):
        for j in range(3):
            arr.append((i,j))
    
    key = [1,2,3,4,5,6,7,8,9,'*',0,'#']
    keypad = {key:value for key, value in zip(key, arr)}
    
    answer = ''
    left, right = '*', '#'
    
    for number in numbers:
        if number in [1,4,7]:
            answer += 'L'
            left = number
        elif number in [3,6,9]:
            answer += 'R'
            right = number
        else:
            if cal_dist(keypad[left],keypad[number]) < cal_dist(keypad[right], keypad[number]):
                answer += 'L'
                left = number
            elif cal_dist(keypad[left],keypad[number]) == cal_dist(keypad[right], keypad[number]):
                if hand == 'left':
                    answer += 'L'
                    left = number
                else:
                    answer += 'R'
                    right = number
            else:
                answer += 'R'
                right = number
            
    return answer

 

💕 Key Point

zip을 이용하여 크기가 같은 배열 두개를 하나의 dict 딕셔너리로 묶어서 사용할 수 있다.

    keypad = {key:value for key, value in zip(key, arr)}
728x90