function solution(numbers, hand) {
const keys = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
['*', 0, '#'],
]
function keyArr (num) {
for (let i=0; i<keys.length; i++) {
for (let j=0; j<keys[i].length; j++) {
if (num === keys[i][j]) {
return [i,j];
}
}
}
}
function keysDist (arr1, arr2) {
return Math.abs(arr1[0]-arr2[0]) + Math.abs(arr1[1]-arr2[1]);
}
let answer = '';
let leftDist = keyArr('*')
let rightDist = keyArr('#')
for (let i=0; i<numbers.length; i++) {
if (numbers[i] == 1 || numbers[i] == 4 || numbers[i] == 7) {
answer += 'L';
leftDist = keyArr(numbers[i]);
}
else if (numbers[i] == 3 || numbers[i] == 6 || numbers[i] == 9) {
answer += 'R';
rightDist = keyArr(numbers[i]);
}
else {
let Ldist = keysDist(keyArr(numbers[i]), leftDist);
let Rdist = keysDist(keyArr(numbers[i]), rightDist);
// console.log(numbers[i], keyArr(numbers[i]), leftDist, rightDist, Ldist, Rdist);
if (Ldist > Rdist) {
answer += 'R';
rightDist = keyArr(numbers[i]);
} else if (Ldist < Rdist) {
answer += 'L';
leftDist = keyArr(numbers[i]);
}
else if (Ldist === Rdist) {
if (hand[0].toUpperCase() === 'R') {
answer += hand[0].toUpperCase();
rightDist = keyArr(numbers[i]);
}
else if (hand[0].toUpperCase() === 'L') {
answer += hand[0].toUpperCase();
leftDist = keyArr(numbers[i]);
}
}
}
}
return answer;
}
console.log(solution([7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], "left"));
정규표현식 [xy] ⇒ x와 y 중에 하나
RegExp.prototype.test() ⇒ 정규표현식 만족하는지 판단, true or false로 반환
function solution(numbers, hand) {
hand = hand[0] === "r" ? "R" : "L"
let position = [1, 4, 4, 4, 3, 3, 3, 2, 2, 2] // 얘가 뭘 의미하는거지??
let h = { L: [1, 1], R: [1, 1] }
return numbers.map(x => {
if (/[147]/.test(x)) {
h.L = [position[x], 1]
return "L"
}
if (/[369]/.test(x)) {
h.R = [position[x], 1]
return "R"
}
let distL = Math.abs(position[x] - h.L[0]) + h.L[1]
let distR = Math.abs(position[x] - h.R[0]) + h.R[1]
if (distL === distR) {
h[hand] = [position[x], 0]
return hand
}
if (distL < distR) {
h.L = [position[x], 0]
return "L"
}
h.R = [position[x], 0]
return "R"
}).join("")
}
console.log(solution([7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2], "left"));