키패드 누르기

bird.j·2021년 10월 12일
0

프로그래머스

목록 보기
44/53

프로그래머스

이 문제를 보고 처음에 왼손으로 누른 마지막 번호와 오른손으로 누른 마지막 번호를 각각 기억해야 하므로 스택을 사용하는 건가 싶었지만, 이전의 내역을 모두 알아야하는게 아니므로 단순히 각 경우의 변수를 만들어 변수에 값을 대입해 갱신해주면 되었다.

그리고 키패드 간의 거리를 구하는 방법은 키패드의 숫자와는 상관없고 좌표로 만들어 x좌표의 차이와 y좌표의 차이를 합해주면 된다.

각 키패드에 대한 좌표 값을 dictionary로 만드는게 키포인트 같다.

def distance(l, r, n):
    ld = abs(n[0]-l[0]) + abs(n[1]-l[1])
    rd = abs(n[0]-r[0]) + abs(n[1]-r[1])
    return ld, rd

def solution(numbers, hand):
    ans = ''
    keypad = {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]}
    l, r = '*', '#'
    
    for i in range(len(numbers)):
        if numbers[i] ==1 or numbers[i] ==4 or numbers[i] ==7:
            l = numbers[i]
            ans += 'L'
            
        elif numbers[i] ==3 or numbers[i] ==6 or numbers[i] ==9:
            r = numbers[i]
            ans += 'R'
            
        elif numbers[i] ==2 or numbers[i] ==5 or numbers[i] ==8 or numbers[i] ==0:
            l_key = keypad[l]
            r_key = keypad[r]
            now = keypad[numbers[i]]
            
            ld, rd = distance(l_key, r_key, now) 
            if ld > rd:
                r = numbers[i]
                ans += 'R'
            elif ld < rd:
                l = numbers[i]
                ans += 'L'
            elif ld == rd:
                if hand == "right":
                    ans += 'R'
                    r = numbers[i]
                elif hand =="left":
                    ans += 'L'
                    l = numbers[i]

    
    return ans

if numbers[i] ==1 or numbers[i] ==4 or numbers[i] ==7: 이 부분을 if numbers[i] in [1, 4, 7]:이렇게 하면 더 간단하다.

0개의 댓글