슬기로운 연구생활

[프로그래머스] 키패드 누르기 본문

슬기로운 코테 생활

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

vhrehfdl 2020. 12. 16. 12:24

* 문제

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

 

* 문제 풀이 

- 첫째, 1,4,7번을 눌렀을 경우 왼손을 사용하고 3,6,9번을 눌렀을 경우 오른손을 사용한다.

- 둘째, 2,5,8,0을 눌렀을 경우 왼손의 마지막 위치, 오른손의 마지막 위치, 눌러야 하는 위치를 사용해 거리 값을 계산한다.

- 셋째, 거리 값은 각 위치마다 x,y 좌표를 부여해서 값을 계산한다.

- 넷째, 좌측 거리 값이 가까운 경우 좌측, 우측 거리 값이 가까운 경우 우측, 값이 같은 경우는 자주 사용하는 손위치를 조건문으로 사용해 해결한다.

 

* 생각

- 2020 카카오 인턴쉽 문제이고 문제가 길어서 약간 당황했다. 그래도 잘 읽어보니 그리 어려운 문제가 아니라 수월하게 풀었다.

- 핵심은 distance 값을 어떻게 구하냐 인 것 같다. xy 좌표로 변환해서 구한 것이 핵심이다.

 

* 코드 

def distance(now, left, right):
    position_dic = {"*":[1,1], "0":[2,1], "#":[3,1], "7":[1,2], "8":[2,2], "9":[3,2], "4":[1,3], "5":[2,3], "6":[3,3], "1":[1,4], "2":[2,4], "3":[3,4]}
    now_xy = position_dic[now]
    left_xy = position_dic[left]
    right_xy = position_dic[right]
    
    left_distance = abs(left_xy[0] - now_xy[0]) + abs(left_xy[1] - now_xy[1])
    right_distance = abs(right_xy[0] - now_xy[0]) + abs(right_xy[1] - now_xy[1])
    
    return left_distance, right_distance


def solution(numbers, hand):
    left_position = "*"
    right_position = "#"
    answer = ""
    for i in range(0, len(numbers)):
        number = str(numbers[i])
        if number in "147":
            left_position = number
            answer += "L"
        elif number in "369":
            right_position = number
            answer += "R"
        elif number in "2580":
            left_distance, right_distance = distance(str(numbers[i]), left_position, right_position)
            
            if left_distance < right_distance:
                left_position = number
                answer += "L"
            elif left_distance > right_distance:
                right_position = number
                answer += "R"
            elif left_distance == right_distance:
                if hand == "left":
                    left_position = number
                    answer += "L"
                elif hand == "right":
                    right_position = number
                    answer += "R"
    
    return answer

 

Comments