[アルゴリズムの問題]キーボードを押す
質問する
この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
親指は上下左右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を順番につなぎ、文字列で返します.
コード#コード#
const keyPad = [[1, 2, 3],
[4, 5, 6],
[7, 8 ,9],
['*', 0, '#']];
// 키 위치 반환 함수
function getPosition(key) {
for (let i = 0; i < keyPad.length; i++) {
if (keyPad[i].indexOf(key) !== -1) {
return [i, keyPad[i].indexOf(key)];
}
}
}
// 키와 키 사이의 거리 반환 함수
function getDistance(position, number) {
return Math.abs(position[0] - number[0]) + Math.abs(position[1] - number[1]);
}
function solution(numbers, hand) {
// 초기 손가락 위치 설정
let leftIndex = getPosition('*');
let rightIndex = getPosition('#');
let result = numbers.map((el) => {
let currentKeyIndex = getPosition(el);
// 왼손과 오른손이 확정적인 경우에 대한 조건문
if (el === 1 || el === 4 || el === 7) {
leftIndex = currentKeyIndex;
return 'L';
}
if (el === 3 || el === 6 || el === 9) {
rightIndex = currentKeyIndex;
return 'R';
}
// 현재 누를 키의 왼손과 오른손에 대한 거리 계산
let leftDistance = getDistance(leftIndex, currentKeyIndex);
let rightDistance = getDistance(rightIndex, currentKeyIndex);
// 거리가 같은 경우 주 손잡이로 반환
if (leftDistance === rightDistance) {
if (hand === "left") {
leftIndex = currentKeyIndex;
return 'L';
}
if (hand === "right") {
rightIndex = currentKeyIndex;
return 'R';
}
}
// 더 가까운 손 반환
if (leftDistance < rightDistance) {
leftIndex = currentKeyIndex;
return 'L';
}
if (leftDistance > rightDistance) {
rightIndex = currentKeyIndex;
return 'R';
}
})
// 문자열로 반환
return result.join('');
}
풀이
出典:プログラマーコードテスト練習、https://programmers.co.kr/learn/challenges
Reference
この問題について([アルゴリズムの問題]キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@idhyo0o/Algorithm-Problem-키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol