본문 바로가기
Python3/프로그래머스

2022.03.08 [프로그래머스] (python 파이썬) 키패드 누르기

by ian's coding 2022. 3. 8.
728x90
반응형

 

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

 

 


풀이

이 문제는 147은 왼손으로 369는 오른손으로 누르면 되지만 2580일때, 번호와 두 손간의 거리를 확인하고 가까운 손으로 눌러야 한다. 만약 거리가 같으면 주로 사용하는 손으로 눌러야한다.

그래서 거리를 재야하는게 가장 중요하다고 생각이 들었다. 

우선 거리를 재기위해 key배열에 각 번호의 좌표를 저장했다. 예를 들어 0번째 인덱스는 키패드 0의 위치를 저장했다.

그리고 오른손 왼손은 3,2 , 3,0으로 지정했다. 왜나하면 시작을 *,#에서 시작하기 때문에 각 문자의 위치로 저장했다.

그리고 1,4,7이 나오면 answer에 L을 저장했고 left를 업데이트해주었다. 3,6,9도 동일하게 코드를 작성했고,

중간에 위치한 숫자가 나오면 abs를 이용해 각손과 숫자의 거리를 r_d, l_d에 각각 저장했다. 그리고 만약 거리가 같으면 주로 사용하는 손으로 누르게 했고 같지 않으면 더 짧은 거리의 손으로 누르게 했다.

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
def solution(numbers, hand):
    answer = ''
    key=[[3,1],[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1],[2,2]]
    right=[3,2]
    left=[3,0]
    for i in numbers:
        if i in [1,4,7]:
            answer+='L'
            left=key[i]
        elif i in [3,6,9]:
            answer+='R'
            right=key[i]
        elif i in [2,5,8,0]:
            r_d=abs(right[0]-key[i][0])+abs(right[1]-key[i][1])
            l_d=abs(left[0]-key[i][0])+abs(left[1]-key[i][1])
            if r_d==l_d:
                if hand=="right":
                    answer+='R'
                    right=key[i]
                else:
                    answer+='L'
                    left=key[i]
            elif r_d>l_d:
                answer+='L'
                left=key[i]
            elif r_d<l_d:
                answer+='R'
                right=key[i]
    return answer
cs

 

 

 

 

728x90
반응형

댓글