키패드에서 눌려야 할 문자열 numbers에 맞춰 어떤 손으로 눌러야 하는지 출력한다.
양 끝의 숫자들은 눌러야 하는 손이 정해져 있기 때문에 고려를 크게 안해도 되지만, 가운데 숫자의 현재 손과의 거리와 같았을 때 어떤 손으로 눌러야 할지를 알기위해 다음 숫자를 누를때 마다 현재 위치를 저장하여 비교하였단.
function solution(numbers, hand) {
let numbersArray = [];
let currentL=[4,1];
let currentR=[4,3];
numbers.forEach(function(element,index){
if(element === 1) numbersArray.push([1,1]);
if(element === 2) numbersArray.push([1,2]);
if(element === 3) numbersArray.push([1,3]);
if(element === 4) numbersArray.push([2,1]);
if(element === 5) numbersArray.push([2,2]);
if(element === 6) numbersArray.push([2,3]);
if(element === 7) numbersArray.push([3,1]);
if(element === 8) numbersArray.push([3,2]);
if(element === 9) numbersArray.push([3,3]);
if(element === 0) numbersArray.push([4,2]);
})
function distance(inputBtn,handL, handR){
const distanceL = Math.abs(inputBtn[0]-handL[0])+Math.abs(inputBtn[1]-handL [1]);
const distanceR = Math.abs(inputBtn[0]-handR[0])+Math.abs(inputBtn[1]-handR [1]);
return distanceR - distanceL;
}
let result="";
for(let i=0;i<numbers.length; i++){
if(numbers[i] === 1||numbers[i] === 4||numbers[i] === 7){
result = result + "L";
currentL = numbersArray[i];
}
if(numbers[i] === 3||numbers[i] === 6||numbers[i] === 9){
result = result + "R";
currentR = numbersArray[i];
}
if(numbers[i] === 2||numbers[i] === 5||numbers[i] === 8||numbers[i] ===0){
let distanceResult = distance(numbersArray[i],currentL,currentR);
if( distanceResult === 0){
if(hand === "left"){
result = result + "L";
currentL = numbersArray[i];
}else if(hand === "right"){
result = result + "R";
currentR = numbersArray[i];
}
} else if(distanceResult >0 ){
result = result + "L";
currentL = numbersArray[i];
}else{
result = result + "R";
currentR = numbersArray[i];
}
}
}
return result;
}
화이팅!