본문 바로가기
알고리즘/프로그래머스

[Python] 키패드 누르기

by 컴공맨 2021. 2. 27.
 

코딩테스트 연습 - [1차] 비밀지도

비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다

programmers.co.kr


풀이

스마트폰에서의 키패드의 [i, j]위치를 미리 리스트에 초기화 하여 만약 2, 5, 8, 0을 누르게 됬을 때, 점과 점사이의 거리를 구할 수 있게 하여 해결했습니다.

처음 시작할 때 왼쪽 손이 위치한 '*'의 위치와 오른 손이 위치한 '#'의 [i, j] 위치를 꼭 초기화 해야함을 주의해야 합니다.


코드

def solution(numbers, hand):
    answer = ''

    phone = [[1, 4, 7], [2, 5, 8, 0], [3, 6, 9]]
    # *, #의 위치도 처음에 초기화 해야함을 잊지말자
    # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #
    pad = [[3, 1], [0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2], [3, 0], [3, 2]]
    left_cur = 10
    right_cur = 11

    for number in numbers:
        if number in phone[0]:
            answer += 'L'
            left_cur = number
        elif number in phone[2]:
            answer += 'R'
            right_cur = number
        elif number in phone[1]:
            l_len = abs(pad[left_cur][0] - pad[number][0]) + abs(pad[left_cur][1] - pad[number][1])
            r_len = abs(pad[right_cur][0] - pad[number][0]) + abs(pad[right_cur][1] - pad[number][1])

            if l_len > r_len:
                answer += 'R'
                right_cur = number
            elif l_len < r_len:
                answer += 'L'
                left_cur = number
            elif hand == 'right':
                answer += 'R'
                right_cur = number
            elif hand == 'left':
                answer += 'L'
                left_cur = number

    return answer

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Python] 실패율  (0) 2021.03.06
[Python] 비밀지도  (0) 2021.02.28
[Python] 2016년  (0) 2021.02.21
[Python] K번째수  (0) 2021.02.20
[Python] 체육복  (0) 2021.02.13