프로그래머스 1단계 : 키패드 누르기
스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다.
이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다.
맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다.
numbers | hands | results |
---|---|---|
[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" |
function solution(numbers, hand) {
let answer = [];
let leftHandPosition = "*";
let rightHandPosition = "#";
numbers.forEach((num) => {
if (num === 1 || num === 4 || num === 7) {
answer.push("L");
leftHandPosition = num;
return;
}
if (num === 3 || num === 6 || num === 9) {
answer.push("R");
rightHandPosition = num;
return;
}
const leftHandDistance = getDistance(leftHandPosition, num);
const rightHandDistance = getDistance(rightHandPosition, num);
if (leftHandDistance === rightHandDistance) {
if (hand === "right") {
answer.push("R");
rightHandPosition = num;
return;
} else {
answer.push("L");
leftHandPosition = num;
return;
}
}
if (leftHandDistance > rightHandDistance) {
answer.push("R");
rightHandPosition = num;
} else {
answer.push("L");
leftHandPosition = num;
}
});
return answer.join("");
}
const getDistance = (locatedNumber, target) => {
const keyPad = {
1: [0, 0],
2: [0, 1],
3: [0, 2],
4: [1, 0],
5: [1, 1],
6: [1, 2],
7: [2, 0],
8: [2, 1],
9: [2, 2],
"*": [3, 0],
0: [3, 1],
"#": [3, 2],
};
const nowPosition = keyPad[locatedNumber];
const targetPosition = keyPad[target];
return (
Math.abs(targetPosition[0] - nowPosition[0]) +
Math.abs(targetPosition[1] - nowPosition[1])
);
};