프로그래머스 - 키패드 누르기
알고리즘/프로그래머스

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

https://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

1. 유형: 구현, 딕셔너리

 

2. 풀이: 

1)

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)

위 같은 형식으로 딕셔너리 만듬

 

2) 왼쪽손, 오른쪽손 좌표를 매 순서마다 저장

 

3.코드

def compare(l, r, t, hand):
    leftdist = abs(l[0] - t[0]) + abs(l[1] - t[1])
    rightdist = abs(r[0] - t[0]) + abs(r[1] - t[1])
    if leftdist > rightdist:
        return 'R'
    elif leftdist < rightdist:
        return 'L'
    else:
        res = 'R' if hand == 'right' else 'L'
        return res


def solution(numbers, hand):
    answer = ''
    dic = {
        0: (3, 1), 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)
    }
    leftpos = [3, 0]
    rightpos = [3, 2]
    for number in numbers:
        if number in (1, 4, 7):
            answer += 'L'
            leftpos = [dic[number][0], dic[number][1]]
        elif number in (3, 6, 9):
            answer += 'R'
            rightpos = [dic[number][0], dic[number][1]]
        else:
            tmp = [dic[number][0], dic[number][1]]
            if compare(leftpos, rightpos, tmp, hand)=='R':
                rightpos = [tmp[0], tmp[1]]
                answer+='R'
            else:
                leftpos=[tmp[0], tmp[1]]
                answer+='L'
    return answer