문제
풀이
function solution(numbers, hand) {
let answer = "";
// 전화 키패드를 2차원 배열화하여 각 인덱스 정보를 key를 통해 알아낼 수 있도록 객체로 선언
const keys = {
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],
};
// 왼손은 키패드 * 위에서 시작하고 오른손은 키패드 # 위에서 시작
let leftHand = keys["*"];
let rightHand = keys["#"];
// 눌러야 되는 키패드의 개수만큼 for문을 돈다
for (let i = 0; i < numbers.length; i++) {
// 현재 눌러야되는 키패드를 변수에 담는다
const target = numbers[i];
// 키패드가 1, 4, 7 중에 하나면 answer에 'L'을 더해주고 왼손은 방금 누른 키패드로 이동시킨다
if (target === 1 || target === 4 || target === 7) {
answer += "L";
leftHand = keys[target];
}
// 키패드가 3, 6, 9 중에 하나면 answer에 'R'을 더해주고 오른손은 방금 누른 키패드로 이동시킨다
else if (target === 3 || target === 6 || target === 9) {
answer += "R";
rightHand = keys[target];
}
// 키패드가 2, 5, 8, 0 중에 하나인 경우
else {
// L과 타겟 키패드의 거리와 R과 타겟 키패드의 거리를 위의 거리구하는 함수를 이용해 변수에 담는다
const distanceL = getDistance(leftHand, keys[target]);
const distanceR = getDistance(rightHand, keys[target]);
// 왼손과의 거리가 오른손과의 거리보다 클 경우
if (distanceR < distanceL) {
answer += "R";
rightHand = keys[target];
}
// 오른손과의 거리가 왼손과의 거리보다 클 경우
if (distanceR > distanceL) {
answer += "L";
leftHand = keys[target];
}
// 오른손과의 거리와 왼손과의 거리가 같은 경우
if (distanceR === distanceL) {
// 오른손잡이일 경우
if (hand === "right") {
answer += "R";
rightHand = keys[target];
}
// 왼손잡이일 경우
if (hand === "left") {
answer += "L";
leftHand = keys[target];
}
}
}
}
return answer;
}