알고리즘/프로그래머스

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

sssbin 2023. 1. 14. 00:15

 

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

 

프로그래머스

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

programmers.co.kr

 

키패드를 좌표로 딕셔너리에 저장해주고

1) number가 1, 4, 7이면 'L' & 현재 위치 저장

2) number가 3, 6, 9이면 'R' & 현재 위치 저장

3) number가 2, 5, 8, 0이면 현재 왼손과 오른손의 위치를 비교해서 더 가까운 손으로 출력

     ㄴ 거리가 같으면 hand에 따라 출력해준다.

 

# 프로그래머스 67256: 키패드 누르기 (2020 카카오 인턴십)

def solution(numbers, hand):
    answer = ''
    keypad = {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]}

    l = '*'
    r = '#'
    for i in numbers:
        if i == 1 or i == 4 or i == 7:
            answer += 'L'
            l = i
        elif i == 3 or i == 6 or i == 9:
            answer += 'R'
            r = i
        else:
            lenL = abs((keypad[i][0] - keypad[l][0])) + abs((keypad[i][1] - keypad[l][1]))
            lenR = abs((keypad[i][0] - keypad[r][0])) + abs((keypad[i][1] - keypad[r][1]))
            if lenL > lenR:
                answer += 'R'
                r = i
            elif lenL < lenR:
                answer += 'L'
                l = i
            else:
                if hand == 'right':
                    answer += 'R'
                    r = i
                else:
                    answer += 'L'
                    l = i
                 
    return answer

 

딕셔너리에 좌표를 저장한다는 아이디어만 떠올리면 쉽게 풀 수 있을 것 같다.

나는 안 떠올라서 조금 헤맸다 🥲