본문 바로가기
Algorithm/Python

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

by 힘팽 2022. 3. 10.

◈ 오류 정정 및 피드백 환영

 

코딩테스트 연습 - 키패드 누르기

[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


🔎문제 분석

키패드 버튼을 좌표로 구현하면 된다. 0번을 원점으로 두도록 하면 다음과 같다.

def get_coord(number):
    if number != 0:
        x = (number+2)%3-1
        y = 3-(number-1)//3
    else:
        x = 0
        y = 0
    return x, y

 

🤦‍♀️유의 사항

좌표 사이의 거리를 계산할 때 일반적인 유클리디안 거리로 계산해서는 안 된다.


def get_coord(number):
    if number != 0:
        x = (number+2)%3-1
        y = 3-(number-1)//3
    else:
        x = 0
        y = 0
    return x, y

def get_dist(x1, y1, x2, y2):
    dist = (abs(x1-x2) + abs(y1-y2))
    return dist

def solution(numbers, hand):
    L_x, L_y = -1, 0
    R_x, R_y = 1, 0
    answer = ''
    for i in numbers:
        x, y = get_coord(i)
        if i in [1,4,7]:
            answer += "L"
            L_x, L_y = x, y
        elif i in [3,6,9]:
            answer += "R"
            R_x, R_y = x, y
        else:
            L_dist = get_dist(x, y, L_x, L_y)
            R_dist = get_dist(x, y, R_x, R_y)
            dif = L_dist - R_dist
            if (dif<0)|(dif==0 and hand=="left"):
                answer += "L"
                L_x, L_y = x, y
            elif (dif>0)|(dif==0 and hand=="right"):
                answer += "R"
                R_x, R_y = x, y       
    return answer

댓글