본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[프로그래머스] Lv.1 키패드 누르기 - Python

by chaemj97 2022. 6. 2.
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


  • 생각
    • 키패드 간의 거리 구하는게 문제였다.. 처음에 3으로 나눈 나머지와 몫을 이용해서 풀었는데 그러면 코드가 눈에 잘 안들어와서 dictionary로 아예 만들어버림
    • 자꾸 코드의 가독성이 떨어져서 답을 구하고도 다시 코드를 정리하게 된다... 고쳐야지

 

  • 코드
def solution(numbers, hand):
    answer = ''
    
    # 각 자리 
    keypad = {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)}
                
    # 현재 엄지의 위치 [왼손, 오른손]
    hands = ['*', '#']
    
    # 번호 누르기
    for num in numbers:
        if num in [1, 4, 7]:
            answer += 'L'
            hands[0] = num
        elif num in [3, 6, 9]:
            answer += 'R'
            hands[1] = num
            
        # 2580
        else:
            # 손가락과 누르고 싶은 키패드 거리 구하기
            want = keypad[num]
            l = keypad[hands[0]]
            r = keypad[hands[1]]
            l_dist = abs(want[0]-l[0]) + abs(want[1]-l[1])
            r_dist = abs(want[0]-r[0]) + abs(want[1]-r[1])
            
            if r_dist > l_dist:
                answer += 'L'
                hands[0] = num
            elif r_dist < l_dist:
                answer += 'R'
                hands[1] = num
            # 거리가 같으면 어느손잡이인지에 따라
            else:
                if hand == 'left':
                    answer += 'L'
                    hands[0] = num
                else:               
                    answer += 'R'
                    hands[1] = num

    return answer
728x90
반응형

댓글