Lv1 - 키패드 누르기

LeeKyoungChang·2022년 4월 25일
0

Algorithm

목록 보기
180/203
post-thumbnail
post-custom-banner

📚 Lv1 - 키패드 누르기

키패드 누르기

 

이해

1, 4, 7 : 왼손
3, 6, 9 : 오른손
2, 5, 8 : 위치 및 손잡이로 판단

문제 이해하기 위해 먼저 예시를 보자!

ex) 1 3 4 5 8 2 1 4 5 9 5
- left, right는 행렬 위치

1인 경우 (4도 동일하다.)
- 왼손에 해당 숫자 이므로, left에 1의 행렬 위치 저장

3인 경우
- 오른손에 해당 숫자 이므로, right에 3의 행렬 위치 저장

5인 경우
가운데에 해당 숫자 이므로, 
- 왼쪽과 오른쪽 중 가장 가까운 위치에 있는 손으로 버튼을 누른다.
- 같은 경우이면, 왼손 잡이 오른손 잡이로 판결난다.
현재는 4 와 3 중 4가 가까우므로 왼손으로 버튼을 누른다.

위 예시를 보면 경우의 수를 알 수 있다.
(가장 가까운 위치 : 두 좌표 x, y 차이 값으로 알 수 있다.)

그리고, 입력된 0 ~ 9 숫자로 2차원 배열 위치를 알 수 있다.

1은 0, 0 
2는 0, 1
~
0은 3, 2

이럴 경우 딕셔너리를 사용하면 된다.

    dist = {i: [] for i in range(0, 10)}
    dist[0] = [3, 1]

    cnt = 1

    for i in range(3):
        for j in range(3):
            dist[cnt] = [i, j]
            cnt += 1

 

소스

def solution(numbers, hand):
    answer = ''
    dist = {i: [] for i in range(0, 10)}
    dist[0] = [3, 1]

    cnt = 1

    for i in range(3):
        for j in range(3):
            dist[cnt] = [i, j]
            cnt += 1

    # 첫 시작 위치
    cur_left = [3, 0]
    cur_right = [3, 2]
    for num in numbers:
        if num in [1, 4, 7]:
            # 왼쪽 좌표
            cur_left = [dist[num][0], dist[num][1]]
            answer += "L"
        elif num in [3, 6, 9]:
            # 오른쪽 좌표
            cur_right = [dist[num][0], dist[num][1]]
            answer += "R"
        else:
            # 가운데 있는 좌표
            cur_left_len = abs(cur_left[0] - dist[num][0]) + abs(cur_left[1] - dist[num][1])
            cur_right_len = abs(cur_right[0] - dist[num][0]) + abs(cur_right[1] - dist[num][1])
            if cur_left_len == cur_right_len:
                if hand == "right":
                    cur_right = [dist[num][0], dist[num][1]]
                    answer += "R"
                else:
                    cur_left = [dist[num][0], dist[num][1]]
                    answer += "L"
            else:
                if cur_left_len > cur_right_len:
                    cur_right = [dist[num][0], dist[num][1]]
                    answer += "R"
                else:
                    cur_left = [dist[num][0], dist[num][1]]
                    answer += "L"

    return answer
스크린샷 2022-04-26 오전 12 29 28
profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"
post-custom-banner

0개의 댓글