プログラマLv 1-キーボードを押す


コード#コード#

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;
}

解答と感想


これは以前Kakao実習を申請した時に解決した問題です.その時も座標で解いたようで、その時はすべてifで処理されていたようです.各番号に座標値positionX,Y変数を与え、現在leftrightの座標から距離を算出する.今のコードはifを処理する時より良いと思います.🤔 一番いいかどうか分かりません.