https://programmers.co.kr/learn/courses/30/lessons/67256
숫자들의 경우의 수들이 많지 않기 때문에 변수로 지정해주고 사용했다. 그리고 적힌 로직대로 했다... 주석 참고
function solution(numbers, hand) {
// left는 왼손으로 right는 오른손으로 나머지는 계산해서 사용
const direction = {
left: [1, 4, 7],
right: [3, 6, 9],
};
// 넘버들의 위치이다. 사진대로 설정했다.
const numberPosition = {
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],
};
// left와 right에 시작 지점을 넣어주었다.
let left = numberPosition['*'];
let right = numberPosition['#'];
let answer = '';
numbers.forEach((number) => {
// number가 left에 들어있으면 왼손, right에 있으면 오른손, 둘 다 없을 경우 거리를 계산, hand에 따라 다르게 누르도록 했다.
if (direction.left.includes(number)) {
answer += 'L';
left = numberPosition[number];
} else if (direction.right.includes(number)) {
answer += 'R';
right = numberPosition[number];
} else {
let [x, y] = numberPosition[number];
let [lx, ly] = left;
let [rx, ry] = right;
let leftDistance = Math.abs(x - lx) + Math.abs(y - ly);
let rightDistance = Math.abs(x - rx) + Math.abs(y - ry);
if (leftDistance > rightDistance) {
right = [x, y];
answer += 'R';
} else if (rightDistance > leftDistance) {
left = [x, y];
answer += 'L';
} else {
if (hand === 'right') {
right = [x, y];
answer += 'R';
} else {
left = [x, y];
answer += 'L';
}
}
}
});
return answer;
}