문제링크 : 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

 

 

 문제설명 

 

순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하는 solution 함수

 

 알고리즘 

 

1. 숫자가 3 6 9 이면 결과에 R을 추가하고 오른손의 위치를 이동

2. 숫자가 1 4 7 이면 결과에 L을 추가하고 왼손 위치를 이동

3. 결과가  2 5 8이면 왼손의 위치와 오른손의 위치를 통해 거리를 구하고 짧은거리의 손을 이동

4. answer  return .

 

 코드 

 

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
def solution(numbers, hand):
    left = [3,0]
    right = [3,2]
    answer = ''
    for num in numbers:
        if num==0 : 
            num=11
            
        if num == 3 or num== 6 or num== 9:
            answer+='R'            
            right=[int(num/3-1),2]
                      
        elif num == 1 or num== 4 or num== 7:    
            answer+='L'
            left = [int(num/3),num%3-1]
        
        else :
            right_dist = abs(right[0]-int(num/3))+abs(right[1]-int(num%3-1))
            left_dist = abs(left[0]-int(num/3))+abs(left[1]-int(num%3-1))
 
            if right_dist > left_dist :
                answer+='L'
                left = [int(num/3),num%3-1]
            elif left_dist>right_dist :
                answer+='R'
                right = [int(num/3),num%3-1]
            else :
                if hand == 'right':
                    answer+='R'
                    right = [int(num/3),num%3-1]
                else :
                    answer+='L'
                    left = [int(num/3),num%3-1]        
            
                    
    return answer
 
cs
 

 

ariz1623