[プログラマlv.1]JSでキーボードを押す


✉ Question


🔗 質問リンク

問題の説明


スマートフォンの電話キーボードの各スペースには、次の数字があります.

この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
親指は上下左右4方向にしか移動できず、キーボードを動かすセル距離は1です.
左の列に1、4、7の数字を3つ入力する場合は、左手親指を使用します.
右の列の3つの数字3、6、9を入力する場合は、右手親指を使用します.
中間列の4つの数字2、5、8、0を入力する場合は、2つの親指の現在のキーボード位置に近い親指を使用します.
4-1. 2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
solution関数を完了して順序番号を示す配列番号、左利きか右利きかを示す文字列番号をパラメータとすると、各番号の親指が左手か右手かを示す連続文字列形式で返されます.

せいげんじょうけん


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

💌 Answer

  • 左側のキーパッド(1,4,7)を左手/右側のキーパッド(3,6,9)で右手で押さえます.
  • 「*」は10、「0」は11、「#」は12とデジタル化されています.
  • getDistance(현재 숫자, 목표 숫자):距離が0~4の場合、数値を配布する関数が作成されます.
    (目標数字は2、5、8、0のいずれか)
  • 中間のキーパッド(2,5,8,0)は距離を表す.
  • 距離が等しい場合は、手で判断
  • function solution(numbers, hand) {
        let answer = '';
      
        let currLeft = 10;
        let currRight = 12;
    
        for(let n of numbers) {
            if(n === 1 || n === 4 || n === 7) {
                answer += 'L';
                currLeft = n;
            }else if(n === 3 || n === 6 || n === 9) {
                answer += 'R'
                currRight = n;
            }else {
                if(getDistance(currLeft, n) < getDistance(currRight, n)) {
                    answer += 'L';
                    currLeft = n;
                }else if(getDistance(currLeft, n) > getDistance(currRight, n)) {
                    answer += 'R';
                    currRight = n;
                }else {
                    if(hand === 'left') {
                        answer += 'L';
                        currLeft = n;
                    }else {
                        answer += 'R';
                        currRight = n;
                    }
                }
            }
        }
        return answer;
    }
    
    function getDistance(current, dist) {
        
        if(current === 0) current = 11;
        if(dist === 0) dist = 11;
    
        let distance = Math.abs(current - dist);
    
        if(distance % 3 === 0) {
            distance = distance / 3;
        }else if(distance === 1) {
            distance = 1;
            
        }else if(distance === 2 || distance === 4) {
            distance = 2;
        }else if(distance === 5 || distance === 7) {
            distance = 3;
        }else {
            distance = 4;
        }
    
        return distance;
    }