[プログラマ]キーボードを押す
16614 ワード
🤔 質問する
プログラマ-キーボードを押す
2020ココア実習
スマートフォンの電話キーボードの各スペースには、次の数字があります.
この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
4-1. 2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
¥2,000円制限
左手親指を使う場合はL、右手親指を使う場合はRを順番につなぎ、文字列で返します.
💡 に近づく
-
const keypad = { key(keypad 숫자): value([y, x]) }
solution
関数では、左列と右列について無条件に'L', 'R'
と定められているので、if, else if
条件に従ってanswer
配列に入れる.中間の列については、現在入力されている
num
と左右の指の位置leftPos, rightPos
との距離に基づいて、'L', 'R'
の値が決定される.中熱時間距離の関数
calcDistance
を作成した.横(x軸)、縦(y軸)の距離を算出して合算し、左手と右手のそれぞれの距離を比較して「L」または「R」を返します.このとき距離計算では負数が出ないため,Math.abs()
法を用いた.距離が同じ場合、hand
を基準とします.calcDistance
関数の戻り値をanswer
配列に入れます.'L', 'R'
により、leftPos, rightPos
の状態も更新されます.🧑🏻💻 コード#コード#
function calcDistance(num, leftPos, rightPos, hand) {
const keypad = {
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],
};
// 왼손 거리
const leftDistance =
Math.abs(keypad[num][0] - keypad[leftPos][0]) +
Math.abs(keypad[num][1] - keypad[leftPos][1]);
// 오른손 거리
const rightDistance =
Math.abs(keypad[num][0] - keypad[rightPos][0]) +
Math.abs(keypad[num][1] - keypad[rightPos][1]);
// 거리 비교 후 'L' 또는 'R' 리턴
if (leftDistance > rightDistance) return 'R';
if (leftDistance < rightDistance) return 'L';
return hand[0].toUpperCase();
}
function solution(numbers, hand) {
let leftPos = '*';
let rightPos = '#';
const answer = [];
for (let i = 0; i < numbers.length; i++) {
const num = numbers[i];
if (num % 3 === 1) { // 키패드 왼쪽 열
answer.push('L');
leftPos = num;
} else if (num % 3 === 0 && num !== 0) { // 키패드 오른쪽 열
answer.push('R');
rightPos = num;
} else { // 키패드 가운데 열
answer.push(calcDistance(num, leftPos, rightPos, hand));
calcDistance(num, leftPos, rightPos, hand) === 'R'
? (rightPos = num)
: (leftPos = num);
}
}
return answer.join('');
}
solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5], 'right'); // "LRLLLRLLRRL"
📝 リファレンス
Kakao Tech-2020 KACO技術開発者実習問題解説
Reference
この問題について([プログラマ]キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@keemtj/프로그래머스-키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol