function solution(numbers, hand) {
var answer = ''; // 1.
const keypad = [ // 2.
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
['*', 0, '#'],
];
let leftFinger = '*'; // 3.
let rightFinger = '#';
const findIndex = (number) => { // 4.
const result = [];
for (let j = 0; j < keypad.length; j++) {
for (let k = 0; k < keypad.length; k++) {
if (keypad[j][k] === number) {
result.push([j], [k]);
}
}
}
return result;
};
const calLength = (array1, array2) => { // 5.
let result = 0;
for (let i = 0; i < array1.length; i++) {
for (let j = 0; j < array2.length; j++) {
if (i === j) {
result += Math.abs(array1[i] - array2[j]);
}
}
}
return result;
};
for (let i = 0; i < numbers.length; i++) { // 6.
if (numbers[i] === 1 || numbers[i] === 4 || numbers[i] === 7) {
leftFinger = numbers[i];
answer += 'L';
} else if (numbers[i] === 3 || numbers[i] === 6 || numbers[i] === 9) {
rightFinger = numbers[i];
answer += 'R';
} else {
if (calLength(findIndex(numbers[i]), findIndex(leftFinger)) < calLength(findIndex(numbers[i]), findIndex(rightFinger))) {
leftFinger = numbers[i];
answer += 'L';
} else if (calLength(findIndex(numbers[i]), findIndex(leftFinger)) > calLength(findIndex(numbers[i]), findIndex(rightFinger))) {
rightFinger = numbers[i];
answer += 'R';
} else {
if (hand === 'right') {
rightFinger = numbers[i];
answer += 'R';
} else {
leftFinger = numbers[i];
answer += 'L';
}
}
}
}
return answer;
}
카카오 인턴 문제라 그런지 푸는데 3시간정도 걸렸던 것 같다... 😢
처음에는 한 번에 풀려고 했는데 너무 많은 반복문이 필요했던 것 같아 함수로 분리해서 문제를 풀었다.
2번까지는 처음에 떠올린 접근방법이었는데, 이후를 구현하는데 어려움이 많았던 것 같다. 무식한 방법이라도 풀어냈다는데 의의를 두어야겠다