스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.
const findDistance = (num, target, keyPad) => {
let numPos;
let tarPos;
for (let i = 0; i < 4; i++) {
for (let j = 0; j < 3; j++) {
if (numPos && tarPos) break;
if (keyPad[i][j] === num) {
numPos = [i, j];
}
if (keyPad[i][j] === target) {
tarPos = [i, j];
}
}
}
return Math.abs(numPos[0] - tarPos[0]) + Math.abs(numPos[1] - tarPos[1]);
};
function solution(numbers, hand) {
let answer = "";
const lt = ["*", 1, 4, 7];
const rt = ["#", 3, 6, 9];
const keyPad = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
["*", 0, "#"],
];
let curPos = ["*", "#"];
for (const target of numbers) {
if (lt.includes(target)) {
curPos[0] = target;
answer += "L";
} else if (rt.includes(target)) {
curPos[1] = target;
answer += "R";
} else {
let leftToTarget = findDistance(curPos[0], target, keyPad);
let rightToTarget = findDistance(curPos[1], target, keyPad);
if (leftToTarget > rightToTarget) {
curPos[1] = target;
answer += "R";
} else if (leftToTarget < rightToTarget) {
curPos[0] = target;
answer += "L";
} else {
if (hand === "right") {
curPos[1] = target;
answer += "R";
} else {
curPos[0] = target;
answer += "L";
}
}
}
}
return answer;
}
조건따라 풀면 된다.