기록

[Python] 키패드 누르기 본문

[Study]/코딩테스트 연습

[Python] 키패드 누르기

Dannnnnn 2020. 11. 10. 18:33
반응형

programmers.co.kr/learn/courses/30/lessons/67256

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

문제에서 요구하는 것을 구현하는 문제입니다.

def solution(numbers, hand):
    answer = ''
    lHand = '*'
    rHand = '#'
    key_pos = {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)}

    for n in numbers:
        if n in [1,4,7]:
            answer += 'L'
            lHand = n
        elif n in [3,6,9]:
            answer += 'R'
            rHand = n
        else:
            curPos = key_pos[n]
            lPos = key_pos[lHand]
            rPos = key_pos[rHand]
            lDist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
            rDist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])

            if lDist < rDist:
                answer += 'L'
                lHand = n
            elif lDist > rDist:
                answer += 'R'
                rHand = n
            else:
                if hand == 'left':
                    answer += 'L'
                    lHand = n
                else:
                    answer += 'R'
                    rHand = n
                    
    return answer

왼쪽, 오른쪽 열의 숫자를 입력할 때는 그대로 해당 방향을 answer에 추가해주고 현재 위치 손이 누른 키패드 수만 바꿔주면 돼요.

문제는 눌러야 할 키패드가 [2, 5, 8, 0]인 경우입니다.

 

키패드에 해당하는 좌표를 쉽게 이용하기 위해 딕셔너리로 매칭했어요.

현재 누를 키에 해당하는 좌표, 왼쪽 손의 좌표, 오른쪽 손의 좌표를 각각 꺼냅니다.

그 후 현재 누를 키로부터 왼쪽 손 좌표, 오른쪽 손 좌표까지의 '거리'를 절댓값을 취해 구합니다.

반응형

'[Study] > 코딩테스트 연습' 카테고리의 다른 글

[Kotlin] 로또의 최고 순위와 최저 순위  (0) 2022.07.15
[Python] 124 나라의 숫자  (0) 2021.04.21
[Python] 실패율  (0) 2020.11.09
[Python] 크레인 인형뽑기 게임  (0) 2020.11.08
[Python] 3진법 뒤집기  (0) 2020.11.07