[プログラマ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
getDistance(현재 숫자, 목표 숫자)
:距離が0~4の場合、数値を配布する関数が作成されます.(目標数字は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;
}
Reference
この問題について([プログラマlv.1]JSでキーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@young18/프로그래머스-키패드-누르기-by-Javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol