[프로그래머스/Python] 키패드 누르기

Sujin Lee·2022년 7월 14일
0

코딩테스트

목록 보기
88/172
post-thumbnail

문제

프로그래머스 - 키패드 누르기

해결 과정

  • 왼쪽 손가락, 오른쪽 손가락의 현재 위치 (*,#) 선언
  • 키패드를 딕셔너리로 선언
  • 반복문을 통해 눌러야하는 번호를 하나씩 확인한다.
    • [1,4,7]일 때, 문자열 'L'을 붙이고, 왼쫀 손가락 위치를 갱신
    • [3,6,9]일 때, 문자열 'R'을 붙이고, 오른쪽 손가락 위치를 갱신
    • [2,5,8,0]일 때
      • 해당 번호와 왼쪽 손가락이 가까운지, 오른쪽 손가락이 가까운지 계산
      • 거리가 가까운 손가락을 움직인다.
      • 거리가 같다면 왼손잡이, 오른손잡이에 따라 달라진다.

시행착오

  • "상하좌우"라는 말이 나오길래 DFS/BFS를 생각했다. 그런데 레벨1인데 더 쉬운 방법이 있을 것 같아서 고민 고민
  • 키패드를 딕셔너리로 선언하는 게 관건!
  • 점과 점사이의 거리를 사용

풀이

def solution(numbers, hand):
    answer = ''
    left_now = [3,0]
    right_now = [3,2]
    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]}
    for i in numbers:
        # 무조건 왼쪽 엄지
        if i in [1,4,7]:
            answer = answer + 'L'
            left_now = keypad[i]
        # 무조건 오른쪽 엄지
        if i in [3,6,9]:
            answer = answer + 'R'
            right_now = keypad[i]
        # 거리에 따른 손가락
        if i in [2,5,8,0]:    
            left = abs(keypad[i][0] - left_now[0]) + abs(keypad[i][1] - left_now[1])
            right = abs(keypad[i][0] - right_now[0]) + abs(keypad[i][1] - right_now[1])
            if left < right:
                left_now = keypad[i]
                answer = answer + 'L'
            elif left > right:
                right_now = keypad[i]
                answer = answer + 'R'
            # 거리가 같으면 왼/오른손잡이
            elif left == right:
                if hand == 'right':
                    right_now = keypad[i]
                    answer = answer + 'R'
                else:
                    left_now = keypad[i]
                    answer = answer + 'L'
    return answer
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글