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

요리하는코더·2021년 8월 5일
0

알고리즘 - 문제

목록 보기
5/48
post-thumbnail

코드

function solution(numbers, hand) {
    var answer = '';
    
    let leftX = 0, leftY = 3, rightX = 2, rightY = 3;
    
    let positionX = [1,0,1,2,0,1,2,0,1,2];
    let positionY = [3,0,0,0,1,1,1,2,2,2];
    
    function moveLeft(num) {
        answer +="L";
        leftX = positionX[num];
        leftY = positionY[num];
    }
    
    function moveRight(num) {
        answer +="R";
        rightX = positionX[num];
        rightY = positionY[num];
    }
    numbers.forEach((num) =>{
        if(num === 1 || num === 4 || num === 7) {
            moveLeft(num)
        } else if(num === 3 || num === 6 || num === 9) {
            moveRight(num)
        } else {
            const distanceL = Math.abs(positionX[num] - leftX) + Math.abs(positionY[num] -leftY);
            const distanceR = Math.abs(positionX[num] - rightX) + Math.abs(positionY[num] -rightY);
            
            if(distanceL < distanceR) {
                moveLeft(num)
            } else if(distanceL > distanceR) {
                moveRight(num)
            } else {
                if(hand === 'left') {
                    moveLeft(num)
                } else {
                    moveRight(num)
                }
            }
        }
    });
    return answer;
}

풀이 및 소감

예전에 카카오 인턴십에 지원했을 때 풀어봤던 문제였다. 그때도 좌표를 이용해서 풀었던 거 같은데 그때는 모든 경우를 그냥 if 처리를 했던 거 같다. 각 번호에 좌표 값을 줘서 positionX,Y 변수로 만들었고 현재 left, right의 좌표로부터 거리를 계산해줬다. 지금 코드가 모든 경우를 if처리했을 때 보다는 낫지 않을까 싶은데🤔 최적인지는 모르겠다.

profile
요리 좋아하는 코린이

0개의 댓글