티스토리 뷰

728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/67256?language=python3 

 

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

[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 = ''
    dic = {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]}
    
    left_s = dic['*']
    right_s = dic['#']
    
    for i in numbers:
        now = dic[i]

        if i in [1, 4, 7]:
            answer += 'L'
            left_s = now
            
        elif i in [3, 6, 9]:
            answer += 'R'
            right_s = now
            
        else:
            left_d = 0
            right_d = 0
            
            for a, b, c in zip(left_s, right_s, now):
                left_d += abs(a-c)
                right_d += abs(b-c)
            
            if left_d < right_d:
                answer += 'L'
                left_s = now
                
            elif left_d > right_d:
                answer += 'R'
                right_s = now
            
            else:
                if hand == 'left':
                    answer += 'L'
                    left_s = now
                    
                else:
                    answer += 'R'
                    right_s = now
            
    return answer

번호가 1,4,7인 경우에는 왼쪽으로 3,6,9인 경우에는 오른쪽으로 누른다.

2,5,8,0일 경우에는 가까운 손가락으로 누르면 되는데

거리를 구해야 하기 때문에 딕셔너리로 좌표값도 같이 선언해준다.

 

거리를 구할 때 x,y 좌표를 각각 빼준다음에 절댓값을 씌워주면 된다.

만약 왼쪽 오른쪽 거리가 같을 경우에는 hand에 들어온 값으로 결정해주면 된다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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