프로그래머스

프로그래머스 - 키패드 누르기

yanJuicy 2021. 8. 21. 20:02
반응형

문제

 

https://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

 

 

풀이

 

[1, 4, 7]을 눌렀을 경우에는 바로 L을 추가하고, [3, 6, 9]를 눌렀을 때는 바로 R을 추가한다.

[2, 5, 8, 0]을 눌렀을 경우에는 왼쪽 손과 오른쪽 손에 있는 버튼과의 거리를 각각 구해서 비교한다. 거리를 구할 때 세로 거리와 가로 거리를 따로 구해서 더해주면 된다. 

 

 

코드

 

python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def solution(numbers, hand):
    answer = ''
    left, right = '*''#'
    for i in numbers:
        if i in [147]:
            answer += 'L'
            left = i
        elif i in [369]:
            answer += 'R'
            right = i
        else:
            pad = {1: [00], 2: [01], 3: [02],
                    4: [10], 5: [11], 6: [12],
                    7: [20], 8: [21], 9: [22],
                    '*': [30], 0: [31], '#':[32]}
            ld = abs(pad.get(i)[0- pad.get(left)[0]) + abs(pad.get(i)[1- pad.get(left)[1])
            rd = abs(pad.get(i)[0- pad.get(right)[0]) + abs(pad.get(i)[1- pad.get(right)[1])
            if ld < rd:
                left = i
                answer += 'L'
            elif ld > rd:
                right = i
                answer += 'R'
            else:
                answer += hand[0].upper()
                if hand == 'left':
                    left = i
                else:
                    right = i
 
    return answer
cs

 

반응형