스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.

이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
순서대로 누를 번호가 담긴 배열 numbers, 왼손잡이인지 오른손잡이인 지를 나타내는 문자열 hand가 매개변수로 주어질 때, 각 번호를 누른 엄지손가락이 왼손인 지 오른손인 지를 나타내는 연속된 문자열 형태로 return 하도록 solution 함수를 완성해주세요.
| numbers | hand | result |
|---|---|---|
| [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" |
이 두 가지가 핵심이다.
1번은 키패드 숫자와 좌표를 객체에 담아주면 쉽게 값들을 이용할 수 있고, 2번은 절댓값을 이용해 구할 수 있다.
나머지는 문제의 설명을 따라 차근차근 구현하면 된다.
function solution(numbers, hand) {
let answer = '';
let pad = {
1: [0, 0], 2: [1, 0], 3: [2, 0],
4: [0, 1], 5: [1, 1], 6: [2, 1],
7: [0, 2], 8: [1, 2], 9: [2, 2],
'*': [0, 3], 0: [1, 3], '#': [2, 3],
};
let left = pad['*'];
let right = pad['#'];
for (let i of numbers) {
let [x, y] = pad[i];
if (x === 0) {
answer += 'L';
left = pad[i];
} else if (x === 2) {
answer += 'R';
right = pad[i];
} else {
let disL = Math.abs(x - left[0]) + Math.abs(y - left[1]);
let disR = Math.abs(x - right[0]) + Math.abs(y - right[1]);
if (disL > disR) {
answer += 'R';
right = pad[i];
} else if (disL < disR) {
answer += 'L';
left = pad[i];
} else {
if (hand == 'left') {
answer += 'L';
left = pad[i];
} else {
answer += 'R';
right = pad[i];
}
}
}
}
return answer;
}