시작이 반

[프로그래머스] 키패드 누르기(python 파이썬) 본문

알고리즘/Programmers

[프로그래머스] 키패드 누르기(python 파이썬)

G_Gi 2021. 4. 29. 17:15
SMALL

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

 

백준의 20436번 문제와 비슷하다. 

 

각 순간마다 어느 손가락으로 키패드를 누를지 정한다.

 

list를 이용하여 가상의 키패드를 만들고 눌러아할 숫자가 나올때마다 좌표를 계산한다.

 

def solution(numbers, hand):
    answer = ''
    keypad = ['123', '456', '789', '*0#']
    cl_x, cl_y = 3, 0
    cr_x, cr_y = 3, 2

    for n in numbers:
        number = str(n)
        if number == '1' or number == '4' or number == '7':
            cl_y = 0
            for i in range(len(keypad)):
                if number in keypad[i]:
                    cl_x = i
            answer += 'L'

        elif number == '3' or number == '6' or number == '9':
            cr_y = 2
            for i in range(len(keypad)):
                if number in keypad[i]:
                    cr_x = i
            answer += 'R'

        else:
            n_y = 1
            for i in range(len(keypad)):
                if number in keypad[i]:
                    n_x = i
                    break

            if abs(cl_x - n_x) + abs(cl_y - n_y) < abs(cr_x - n_x) + abs(cr_y - n_y):
                cl_x = n_x
                cl_y = n_y
                answer += 'L'
            elif abs(cl_x - n_x) + abs(cl_y - n_y) > abs(cr_x - n_x) + abs(cr_y - n_y):
                cr_x = n_x
                cr_y = n_y
                answer += 'R'
            else:
                if hand == 'right':
                    cr_x = n_x
                    cr_y = n_y
                    answer += 'R'
                else:
                    cl_x = n_x
                    cl_y = n_y
                    answer += 'L'

    return answer
LIST