🔗 문제 링크

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


👨🏻‍💻 내가 작성한 코드

#중앙키를 누를 때
def cal_distance(hand, num):
    if num == 0: num += 11
    if hand == 0: hand += 11
    
    #손가락이 이미 중앙에 있는 경우
    if hand in [2, 5, 8, 11]: 
        return (abs(num - hand)) / 3
        
    #손가락이 좌측 또는 우측에 있는 경우
    distance = abs(hand - num)
    if distance in [2, 4]:
        return 2
    elif distance in [5, 7]:
        return 3
    elif distance in [8, 10]:
        return 4
    else: return 1

def solution(numbers, hand):
    answer = ''
    l_hand = 10 #초기값이 *
    r_hand = 12 #초기값이 #
    l_dis = 0
    r_dis = 0
    
    for num in numbers:
        if num in [1,4,7]:
            answer += 'L'
            l_hand = num
            print("L")
        elif num in [3,6,9]:
            answer += 'R'
            r_hand = num
            print("R")

        else:
            l_dis = cal_distance(l_hand, num)
            r_dis = cal_distance(r_hand, num)
            print(type(l_dis))
            print(type(r_dis))
            if l_dis > r_dis: #왼손의 거리가 더 멀면 오른손이 클릭
                answer += 'R'
                r_hand = num
            elif l_dis < r_dis: #오른손의 거리가 더 멀면 왼손이 클릭
                answer += 'L'
                l_hand = num
            else: #거리가 같으면 왼손잡이면 왼손으로 오른손잡이면 오른손으로 클릭
                if hand == 'right':
                    answer += 'R'
                    r_hand = num
                else:
                    answer += 'L'
                    l_hand = num 
    return answer

📝 결론

문제를 푸는데 아직까지 많은 시간이 걸리며 다른 사람들의 코드와 비교를 하면 코드의 길이가 확실히 길다는 것을 알 수 있다. 이번 문제의 경우는 전반적인 코드의 흐름은 다른 사람들과 유사하나 추천을 많이 받은 코드와 비교를 하면 중앙 숫자인 2,5,8,0의 거리를 직접 나열한 것이 아닌 아래와 같이 dictionary를 사용하여 matrix를 만들고 이를 이용해 거리를 구하는 방법을 사용하였다. 앞으로도 많은 문제를 풀고 사람들의 코드와 비교를 하며 보다 나은 코드를 작성하도록 노력해야겠다.

key_dict = {1:(0,0),2:(0,1),3:(0,2),
                4:(1,0),5:(1,1),6:(1,2),
                7:(2,0),8:(2,1),9:(2,2),
                '*':(3,0),0:(3,1),'#':(3,2)}
profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글