[プログラマ/レベル1]キーボードを押す
問題の説明
スマートフォンの電話キーボードの各スペースには、次の数字があります.
この電話のキーボードには、左手と右手の親指で数字を入力したいだけです.
最初の左手親指は*キーボードから始まり、右手親指は#キーボードの位置から始まり、親指を使うルールは以下の通りです.
4-1. 2つの親指の距離が等しい場合は、右利きは右手親指、左利きは左手親指を使用します.
[制限]
「左」は左利き、「右」は右利きを表す.
numbershandresult[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]"right""LRLLLRLLRRL"[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]"left""LRLLRRLLLRR"[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]"right""LLRLLRLLRL"
I/O例説明
I/O例#1
順番は[1,3,4,5,8,2,4,5,9,5]、右利きです.
左手の位置を使用右手の位置を押す数字説明*#1 L 1を左手で押す.1#3 R 3を右手で押す.134 L 4を左手で押す.435 Lは左手距離が1、右手距離が2なので左手で5を押す.538 Lは左手距離が1、右手距離が3なので左手で8を押す.832 Rは左手距離が2、左手距離が2.右手距離は1なので右手で2を押す.821 L 1を左手で押す.124 L 4を左手で押す.425 R左手距離と右手距離は1なので右手で5を押す.459 R 9右手で5を押す.495 L左手距離は1、右手距離は2なので左手で5を押す.59---
そこで、「LLLLLLRLL」に戻ります.
I/O例#2
左利きが[7,0,8,2,8,3,1,5,7,6,2]の順になると、使用する手は「LR」になります.
I/O例#3
右利きを[1,2,3,4,5,6,7,8,9,0]の順に押すと、使用する手が「LLRLRLL」に変わります.
💻 に答える
まだ解けてない...
function solution(numbers, hand) {
var answer = '';
answer = typeof numbers[0]
let numbersLF = numbers.map(num => {
if(num === 1 || num === 4 || num === 7) {
return 'L';
} else if(num === 3 || num === 6 || num === 9) {
return 'R';
} else {
return num;
}
});
// 가운데 줄 숫자 전까지 LF확인해서 배열로 생성.
let checkNum = []; // 가운데줄숫자인 요소들의 index배열.
numbersLF.forEach((ele, index) => {
if(typeof ele === 'number') {
checkNum.push(index);
}
})
// 가운데 줄 숫자 전 LF배열에서 마지막 L,F 추출.
checkNum.forEach(ele => {
for(let i = 0; i < ele; i++) {
// 숫자 전까지 LF배열에서 마지막 L,F들 추출.
let lastL = numbersLF.lastIndexOf('L'),
lastR = numbersLF.lastIndexOf('R');
answer = {lastL, lastR};
}
})
return answer;
}
// 1, 4, 7 = left
// 3, 6, 9 = right
// 2, 5, 8, 0 = 가까운쪽
// 1. 입력할 숫자로 왼쪽/오른쪽 판단
// 1-1. 숫자가 2, 5, 8, 0일 경우 바로 전에 입력한 숫자로 거리따져서 판단
// 1-2. 거리가 같을 경우 hand로 판단.
// 2. 판단한 L/R이 나올때마다 생성해 놓은 배열에 넣어주기.
Reference
この問題について([プログラマ/レベル1]キーボードを押す), 我々は、より多くの情報をここで見つけました https://velog.io/@design0728/프로그래머스-level1-키패드-누르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol