Python/Programmers

Lv.1-키패드 누르기

JAEJUNG 2021. 7. 8. 00:32
문제

1 2 3

4 5 6

7 8 9

* 0 #

위와 같은 키패드가 주어진다.

0 ~ 9 까지의 숫자가 담긴 배열 numbers가 주어지고,

1, 4, 7은 왼손으로, 3, 6, 9는 오른손으로 키패드를 누른다고 가정한다.

2, 5, 8, 0은 더 가까운 손가락으로 누르고 거리가 같다면 왼손잡이는 왼손, 오른손잡이는 오른손으로 누른다.

번호를 다 눌렀을 때 눌렸던 손가락의 순서를 return 하시오.

 

내 코드
matrix = [[0]*3]*4
matrix = [
    [1,2,3],
    [4,5,6],
    [7,8,9],
    ['*',0,'#']
]

def find_position(n):
    ny, nx = 0, 0
    for y in range(0, 4):
        for x in range(0, 3):
            if matrix[y][x] == n:
                ny = y
                nx = x
                break
    return ny, nx

# 시작위치
left = {'y': 3, 'x' : 0}
right = {'y' : 3, 'x' : 2}

def solution(numbers, hand):
    result = ""

    for n in numbers:

        if n == 1 or n == 4 or n == 7:    #1, 4, 7은 무조건 L
            ly, lx = find_position(n)
            left['y'] = ly
            left['x'] = lx
            result += "L"

        elif n == 3 or n == 6 or n == 9:  #3, 6, 9는 무조건 R
            ry, rx = find_position(n)
            right['y'] = ry
            right['x'] = rx
            result += "R"

        else:
            ty, tx = find_position(n)
            if ( abs(ty - left['y']) + abs(tx - left['x']) ) > ( abs(ty - right['y']) + abs(tx - right['x'])):
                right['y'] = ty
                right['x'] = tx
                result += "R"

            elif ( abs(ty - left['y']) + abs(tx - left['x'])) < ( abs(ty - right['y']) + abs(tx - right['x'])):
                left['y'] = ty
                left['x'] = tx
                result += "L"

            else:
                if hand == "right":
                    right['y'] = ty
                    right['x'] = tx
                    result += "R"
                else:
                    left['y'] = ty
                    left['x'] = tx
                    result += "L"
    return result

 

문제 풀이

현재의 왼손과 오른손의 위치를 좌표로 저장해놓은 후, 손가락이 움직이면 그에 따라 좌표를 변경한다.

만약 2, 5, 8, 0을 누를 차례가 되면 누를 숫자의 좌표와 현재 왼/오른손의 좌표값의 차이를 구한 후

더 작은 숫자의 손가락을 움직인다.

'Python > Programmers' 카테고리의 다른 글

Lv.1-약수의 개수와 덧셈  (0) 2021.07.10
Lv.1-숫자 문자열과 영단어  (0) 2021.07.08
Lv.1-내적 구하기  (0) 2021.07.07
Lv.1-크레인 인형뽑기  (0) 2021.07.07
Lv.1-모의고사  (0) 2021.07.07