[PRODrammers]キーボードを押す


私の答え

function solution(numbers, hand) {
    var answer = '' // 리턴할 값 (L과 R 로 이루어진 문자열)

    let key = { //키패드의 번호와 그 위치값을 객체로 생성
        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]
    }

    let curL = [3, 0] // 현재 왼손의 위치
    let curR = [3, 2] // 현재 오른손의 위치
    //---------------------------------------------------------------

    const distance = (curHand, curKey) => { // 손 과 키 사이의 거리를 구하는 함수

        // 세로 거리 + 가로 거리
        return Math.abs(curHand[0] - curKey[0]) + Math.abs(curHand[1] - curKey[1])
    }
    //---------------------------------------------------------------
    
    numbers.forEach(num => { // 배열을 순회하면서 answer에 문자열 추가
        
        if (key[num][1] === 0) { // 왼손으로 눌러야 하는 키패드라면
            curL = key[num]
            answer += 'L'
        
        } else if (key[num][1] === 2) { // 오른손으로 눌러야 하는 키패드라면
            curR = key[num]
            answer += 'R'
        
        } else { // 어느손이 키와 가까운지 가늠해야 한다면
            
            let disL = distance(curL, key[num])// 왼손 거리
            let disR = distance(curR, key[num])// 오른손 거리

            if (disL === disR) { // 거리가 같은경우
                
                if (hand === "left") { // 왼손잡이
                    curL = key[num]
                    answer += 'L'
                
                } else { // 오른손잡이
                    curR = key[num]
                    answer += 'R'
                }
            } else { // 거리가 다른 경우

                if (disL > disR) { // 왼손의 거리가 더 멀 경우
                    curR = key[num]
                    answer += 'R'

                } else { // 오른손의 거리가 더 멀 경우
                    curL = key[num]
                    answer += 'L'
                }
            }
        }
    })
    return answer;
}

問題の説明


スマートフォンの電話キーボードから
左手と右手の親指だけ
数字を入力したいだけです.
最初の左手親指は*キーボードにあります
右手親指は#キーボードの位置から始まります.
親指を使うルールは次のとおりです.
親指は上下左右4方向にしか移動できません.
キーボードを移動するセルの距離は1です.
左の列の3つの数値
1,4,7を入力と、
左手親指を使う.
右側の列の3つの数値
3、6、9を入力と、
右手親指を使う.
中間列の4つの数字
2、5、8、0を入力と、
2つの親指の現在のキーボードの位置から
もっと近い親指を使います.
2つの親指の距離が等しい場合、
右利きは右手親指です.
左利きは左手親指を使います.
順番にクリックする番号を含む配列.
左利きか右利きかを示す文字列
パラメータが与えられると、
各番号の親指を押します.
左手か右手かを表す.
solution関数を完了して、連続する文字列を返してください.

せいげんじょうけん


numbers配列のサイズは1000を超えない.
numbers配列要素の値は0または9以下の整数です.
handは「left」または「right」です.
「左」は左利き、「右」は右利きを表す.
左手親指を使う場合はL、右手親指を使う場合はRを順番につなぎ、文字列で返します.

I/O例



#1
順番は[1,3,4,5,8,2,4,5,9,5]、右利きです.

そこで、「LLLLLLRLL」に戻ります.
#2
左利きが[7,0,8,2,8,3,1,5,7,6,2]の順になると、使用する手は「LR」になります.
#3
右利きを[1,2,3,4,5,6,7,8,9,0]の順に押すと、使用する手が「LLRLRLL」に変わります.