키패드 누르기 (2020 카카오 인턴십)

정은경·2020년 9월 30일
0

1. 문제



2. 나의 풀이

  • 방향키 계산 어떻게하니......
def solution(numbers, hand):
    answer = ''
    leftHand, rightHand = 10, 12
    
    for n  in numbers:
        if n in [1, 4, 7]:
            answer += 'L'
            leftHand = n
        elif n in [3, 6, 9]:
            answer += 'R'
            rightHand = n
        else:
            n = 11 if n == 0 else n
            
            absL = abs(n-leftHand)
            absR = abs(n-rightHand)
            
            if sum(divmod(absL, 3)) > sum(divmod(absR, 3)):
                answer += 'R'
                rightHand = n
            elif sum(divmod(absL, 3)) < sum(divmod(absR, 3)):
                answer += 'L'
                leftHand = n
            else:
                if hand == 'left':
                    answer += 'L'
                    leftHand = n
                else:
                    answer += 'R'
                    rightHand = n
            # 손가락의 위치와 가장 가까운 키패드를 찾는 로직
            # if (keys[left]-keys[num])**2 == (keys[right]-keys[num])**2:
            #     answer += "R" if hand == 'right' else 'L'
            #     if hand == 'right': 
            #         answer += 'R'
            #         right = num
            #     else:
            #         answer += 'L'
            #         left = num
            # elif (keys[left]-keys[num])**2 > (keys[right]-keys[num])**2:
            #     answer += 'R'
            #     right = num
            # else:
            #     answer += 'L'
            #     left = num
    return answer

3. 남의 풀이

def solution(numbers, hand):
    answer = ''
    lastL = 10
    lastR = 12
    
    for n in numbers:
        if n in [1,4,7]:
            answer+='L'
            lastL = n
        elif n in [3,6,9]:
            answer+='R'
            lastR = n
        else:
            n = 11 if n == 0 else n
            
            absL = abs(n-lastL)
            absR = abs(n-lastR)
            
            if sum(divmod(absL, 3)) > sum(divmod(absR, 3)):
                answer+='R'
                lastR = n
            elif sum(divmod(absL, 3)) < sum(divmod(absR, 3)):
                answer +='L'
                lastL = n
            else:
                if hand == 'left':
                    answer+='L'
                    lastL = n
                else:
                    answer+='R'
                    lastR = n
                
    return answer
  • https://life-of-panda.tistory.com/75
  • 키패드 간의 거리의 절대값을 3으로 나눈 나머지와 몫을 더하면 거리가 나온다고 한다!??!?!? 이해안됨 아직도사실

4. 느낀 점

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글