[KakaoSolving] 2020 kakao Internship - 키패드누르기[Level1]

redcarrot01·2021년 5월 7일
0

KakaoSolving

목록 보기
1/3
post-thumbnail

문제 링크

입출력 예

| numbers | hand | result |
| --------------------------------- | --------- | --------------- |
| [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" |

나의 풀이


내가 구상한 키패드는

 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)
10[*](3,0)  11[0](3,1)  12[#](3,2)

left_location, right_location이라는 리스트를 만들어 왼손, 오른손이 누르는 번호를 차례대로 넣는 용도다.

맨 처음 왼손 엄지손가락은 별, 오른손 엄지손가락은 #에서 시작하므로,
' 별 ' = 10 , '#' = 12의 초기값을 주었다.

가운데 열의 숫자를 만나면, 1) 두 손가락과 숫자의 거리를 구해야 하고,
2) 거리가 짧은 손잡이를 택하고, 거리가 같다면 손잡이에 따라 번호를 누른다.

getDistance() 함수에서 왼,오른 손가락 최근 위치와 num을 비교하여 거리를 구한다.
거리를 구하는 방법은 키패드를 행렬로 보고, 좌표를 구하고 거리를 구한다.

leftDistance, rightDistance 거리를 각각 변수에 저장하고 비교하여, 번호를 누를 손잡이를 정한다.

코드


import math
def solution(numbers, hand):
    answer = ''
    left_location = [10]
    right_location = [12]
    result = []
    
    while numbers :
        num = numbers.pop(0)
            
        if num in (1, 4, 7):
            result.append("L")
            left_location.append(num)
            
        elif num in (3, 6, 9):
            result.append("R")
            right_location.append(num)
            
        else:
            left = left_location[-1]
            right = right_location[-1]
            leftDistance = getDistance(left, num)
            rightDistance = getDistance(right, num)
            
            if leftDistance < rightDistance :
                result.append('L')
                left_location.append(num)
            elif leftDistance > rightDistance :
                result.append("R")
                right_location.append(num)
            else:
                if hand == "left":
                    result.append('L')
                    left_location.append(num)
                else:
                    result.append("R")
                    right_location.append(num)

                    
    return ''.join(result)

def getDistance(value, num):
    if value == 0:  
        value = 11
    if num == 0:
        num = 11

    x = (value-1)//3
    y= (value-1)%3 
    numx = (num)//3
    numy = 1
    return abs(numx - x) + abs(numy -y)

관심 있을 만한 포스트

0개의 댓글