키패드 누르기 : level1_파이썬

문제

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

내가 푼 풀이

def distance(target, now):
    keypad = [["1","2","3"],["4","5","6"],["7","8","9"],["*","0","#"]]
    
    #현재 위치(now)와 목표 번호(target)를 좌표로 변환
    for i in keypad:
        if type(now) == tuple and type(target) == tuple:
            break
        if now in i:
            now = (keypad.index(i), i.index(now))
        if target in i:
            target = (keypad.index(i), i.index(target))
    
    if now[0] == target[0]: #같은 x축에 위치할 경우
        return abs(now[1] - target[1])
    elif now[1] == target[1]: #같은 y축에 위치할 경우
        return abs(now[0] - target[0])
    else: #대각선에 위치할 경우
        return abs(now[0] - target[0]) + abs(now[1] - target[1])
                 

def solution(numbers, hand):
    answer = ''
    hand_pos = {"L" : "*", "R" : "#"}
    
    while numbers:
        num = numbers.pop(0)
        num = str(num)
        
        if num in ["1", "4", "7"]:
            answer += "L"
            hand_pos["L"] = num
        elif num in ["3", "6", "9"]:
            answer += "R"
            hand_pos["R"] = num
        else: 
            l_dist = distance(num, hand_pos["L"])
            r_dist = distance(num, hand_pos["R"])
            if l_dist > r_dist:
                answer += "R"
                hand_pos["R"] = num
            elif l_dist < r_dist:
                answer += "L"
                hand_pos["L"] = num
            elif l_dist == r_dist:
                if hand == "right":
                    answer += "R"
                    hand_pos["R"] = num
                else:
                    answer += "L"
                    hand_pos["L"] = num   
    return answer

좋은 웹페이지 즐겨찾기