프로그래머스 Lv.1: 키패드 누르기

Steve·2021년 11월 15일
0

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

Lv1 중에서 가장 헤맸던 문제이다.
풀긴 풀었는데 중복되는 코드도 있고 썩 마음에 들지 않아서 다른 사람들의 풀이를 찾아봤다. 그중에 가장 마음에 드는 코드로 한번 바꾸어 보았다.

방법은 객체를 사용하는 것인데, 키패드를 객체의 키로, 각 버튼의 좌표를 객체의 값으로 만드는 것이다.

버튼과 버튼과의 거리는 x 좌표의 차 + y 좌표의 차로 계산한다.

function solution(numbers, hand) {
    var answer = '';
    let left = '*', right = '#';
    
    let 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]
    }
    
    function dist(x, y) {
        let dx = Math.abs(x[0] - y[0]);
        let dy = Math.abs(x[1] - y[1]);
        return dx + dy;
    }
    
    for (let n of numbers) {
        if (n === 1 || n === 4 || n === 7) {
            answer += 'L';  
            left = n;
        }
        else if (n === 3 || n === 6 || n === 9) {
            answer += 'R'
            right = n;
        }
        else {
            let leftd = dist(keypad[n], keypad[left])
            let rightd = dist(keypad[n], keypad[right])
            if (leftd < rightd) {
                answer += 'L'
                left = n;
            }
            else if (leftd > rightd) {
                answer += 'R'
                right = n;
            }
            else {
                if (hand === "left") {
                    answer += 'L';
                    left = n;
                }
                else {
                    answer += 'R';
                    right = n;
                }
            }
        }
    }
    
    return answer;
}
profile
게임과 프론트엔드에 관심이 많습니다.

0개의 댓글