반응형

문제풀이

1. 키패드에서 숫자의 좌표를 정의합니다. 저는 1이 (0,0), #이 (3,2)로 했습니다.

2. numbers에서 주어진 수를 하나씩 꺼내며 숫자가 1,4,7이면 answer에 L을 더하고 왼손의 좌표를 누른 숫자의 좌표로 바꿔줍니다. 주어진 숫자가 3,6,9이면 answer에 R을 더하고 오른손의 좌표를 바꿔줍니다. 주어진 숫자가 가운데 줄에 있는 수인 경우 왼손으로부터의 거리와 오른손으로부터의 거리를 비교하여 짧은 손을 이용합니다. 거리는 각 손의 좌표와 숫자의 좌표의 x축 값끼리의 차의 절댓값과 y축 값끼리의 차의 절댓값을 더한 값이 됩니다.

Python Code

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
global dic
dic = {}
dic['0'= [3,1]
dic['*'= [3,0]
dic['#'= [3,2]
= 0
= 0
for n in range(1,10):
    dic[str(n)] = [i,j]
    j+=1
    if j==3:
        i+=1
        j=0
def solution(numbers, hand):
    global dic
    answer = ''
    l = [3,0]
    r = [3,2]
    for n in numbers:
        near = get_nearest_hand(n,l,r)
        if n in [1,4,7]:
            answer += 'L'
            l = dic[str(n)]
        elif n in [3,6,9]:
            answer += 'R'
            r = dic[str(n)]
        else:
            if near == 'l':
                answer += 'L'
                l = dic[str(n)]
            elif near == 'r':
                answer += 'R'
                r = dic[str(n)]
            else:
                if hand =='right':
                    answer +='R'
                    r = dic[str(n)]
                else:
                    answer += 'L'
                    l = dic[str(n)]
                
    return answer
 
def get_nearest_hand(num,l,r):
    global dic
    tmp = dic[str(num)]
    l_dist = abs(l[0- tmp[0]) + abs(l[1- tmp[1])
    r_dist = abs(r[0- tmp[0]) + abs(r[1- tmp[1])
    if l_dist > r_dist:
        return 'r'
    elif l_dist < r_dist:
        return 'l'
    else :
        return 's'
cs

Line 1 : dic은 키가 숫자이고 값이 좌표인 딕셔너리입니다.

Line 44 : 주어진 숫자가 2,5,8,0인 경우, 숫자로부터 더 가까운 거리의 손을 반환하는 함수입니다.

Line 34 : 양손으로부터 거리가 같은 경우, 오른손잡이인지 왼손잡이인지를 고려합니다.

 

문제 링크

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

 

반응형

+ Recent posts