풀이 과정
- 숫자를 키, 자리 배열 값을 값으로 하는 객체 만들기
numbers
배열에 대해 반복하면서 값 바꾸기: map()
이때 매번 왼손, 오른손의 현재 위치 갱신
1 4 7
이면 왼손, 3 6 9
면 오른손
2 5 8 0
이면 1번 객체에서 자리 배열 값을 찾아서 두 손의 현재 위치 자리 배열값과 비교
이때 둘이 같으면 왼손잡이인지 오른손잡이인지 판단
코드
function solution(numbers, hand) {
let left = 10;
let right = 11;
hand = hand === 'left' ? 'L' : 'R';
return numbers
.map((n) => {
if (n % 3 === 1) {
left = n;
return 'L';
} else if (n && n % 3 === 0) {
right = n;
return 'R';
}
const distL = getDistance(n, left);
const distR = getDistance(n, right);
if (distL === distR) {
left = hand === 'L' ? n : left;
right = hand === 'R' ? n : right;
return hand;
} else if (distL < distR) {
left = n;
return 'L';
} else {
right = n;
return 'R';
}
})
.join('');
}
function getDistance(num1, num2) {
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],
10: [3, 0],
0: [3, 1],
11: [3, 2],
};
return (
Math.abs(keypad[num1][0] - keypad[num2][0]) +
Math.abs(keypad[num1][1] - keypad[num2][1])
);
}
정말 좋은 정보 감사합니다!