스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
1 2 3
4 5 6
7 8 9
* 0 #
이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
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" |
answer
에 "L"
또는 "R"
을 더하는 간단한 로직이다.function solution(numbers, hand) {
var answer = '';
const leftKeyPad = [1, 4, 7, "*"];
const rightKeyPad = [3, 6, 9, "#"];
const midKeyPad = [2, 5, 8, 0];
const nums = numbers;
let currentLPos = '*';
let currentRPos = '#';
nums.forEach((el) => {
if(el === 1 || el === 4 || el === 7) {
currentLPos = el;
answer += "L";
}
else if(el === 3 || el === 6 || el === 9) {
currentRPos = el;
answer += "R";
} else {
const leftDistance = leftKeyPad.indexOf(currentLPos) !== -1 ? Math.abs(leftKeyPad.indexOf(currentLPos) - midKeyPad.indexOf(el)) : Math.abs(midKeyPad.indexOf(currentLPos) - midKeyPad.indexOf(el)) - 1;
const rightDistance = rightKeyPad.indexOf(currentRPos) !== -1 ? Math.abs(rightKeyPad.indexOf(currentRPos) - midKeyPad.indexOf(el)) : Math.abs(midKeyPad.indexOf(currentRPos) - midKeyPad.indexOf(el)) - 1;
if(leftDistance === rightDistance) {
if(hand === "left") {
currentLPos = el;
answer += "L";
} else {
currentRPos = el;
answer += "R";
}
} else {
if(rightDistance > leftDistance) {
answer += "L";
currentLPos = el;
} else {
answer += "R";
currentRPos = el;
}
}
}
});
return answer;
}