눈송이의 개발생활

[Programmers Lv.1]키패드 누르기 (Python) 본문

Algorithm/Programmers

[Programmers Lv.1]키패드 누르기 (Python)

꾸지새미언니

문제

https://programmers.co.kr/learn/courses/30/lessons/67256

내 코드

def solution(numbers, hand):
    answer = ''
    lhand = 10
    rhand = 11

    # index == number로 좌표 만들기
    points = [(3, 1), (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 2)]
    for i in numbers:
        if i in [1, 4, 7]:
            answer += "L"
            lhand = i
        elif i in [3, 6, 9]:
            answer += "R"
            rhand = i

        # 2580 나온 경우
        else:
            ldist = abs(points[lhand][0] - points[i][0]) + abs(points[lhand][1] - points[i][1])
            rdist = abs(points[rhand][0] - points[i][0]) + abs(points[rhand][1] - points[i][1])

            if ldist > rdist:
                answer += "R"
                rhand = i
            elif rdist > ldist:
                answer += "L"
                lhand = i
            else:
                if hand == "right":
                    answer += "R"
                    rhand = i
                else:
                    answer += "L"
                    lhand = i

    return answer

해결 방법

(이 문제는 다른 사람의 풀이도 나와 비슷해서 따로 쓰지 않았다) 

 

처음에 접근하기에 까다로운 문제였다. 가운데에 있는 숫자들까지의 거리를 알아야 하는데, 그럴려면 현재 각 손가락의 위치도 알아야 했다. 

그래서 현재 각 손가락 위치를 의미하는 rhand, lhand 변수를 만들어 주었고, 숫자를 누를때(?)마다 이 변수들에 누르는 숫자를 할당했다. 

points 배열은 각 숫자들의 좌표로 생성했다. 

숫자들을 index로 생성하여 접근하기 쉽게 만들었다. 

1  2  3 

4  5  6 

7  8  9 

10(*)  0   11(#)

위의 키패드를 보면 0은 (3, 1) 위치에 있고, 1은 (0, 0), 6은 (1, 2)라는 것을 잘 알 수 있다. 

 

배운 점 

✅ 좌표 형태로 된 예시가 있으면 좌표로 푸는게 좋을 수 있다. 

✅ 숫자의 크기가 크지 않으면 미리 배열이나 딕셔너리를 만들어 놓고 푸는 것이 효율적일 수 있다. 

 

Comments