프로그래머스 카카오 인턴 – 키패츠 누르기 문제
- 문제
2. 내가 푼 해답
const keypad = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
['*', 0, '#'],
];
const solution = (numbers, hand) => {
const answer = [];
let left_hand = [3, 0];
let right_hand = [3, 2];
const numbers_index = numbers.map((num) => {
let index;
for (let i = 0; i < keypad.length; i++) {
for (let j = 0; j < keypad[0].length; j++) {
if (num === keypad[i][j]) {
index = [i, j];
break;
}
}
}
return index;
});
numbers_index.forEach((index) => {
if (index[1] === 0) {
answer.push('L');
left_hand = index;
} else if (index[1] === 2) {
answer.push('R');
right_hand = index;
} else {
let left_distance = Math.abs(index[0] - left_hand[0]) + Math.abs(index[1] - left_hand[1]);
let right_distance = Math.abs(index[0] - right_hand[0]) + Math.abs(index[1] - right_hand[1]);
if (left_distance === right_distance) {
if (hand == 'left') {
answer.push('L');
left_hand = index;
} else {
answer.push('R');
right_hand = index;
}
} else if (left_distance > right_distance) {
answer.push('R');
right_hand = index;
} else {
answer.push('L');
left_hand = index;
}
}
});
return answer.join('');
};
- numbers를 keypad의 인덱스와 일치한 배열을 선언한다.
- 위에서 선언한 배열을 돌면서, 왼손과 오른손이 명백할 경우 그리고 그 외의 경우를 나누어서 로직을 세운다
1번 인덱스의 수가 0일 경우는 왼손, 2일 경우는 오른손을 이동시키고, 1일 경우엔 위치 계산을 해서 더 가까운 쪽을 이동시키면 된다.
카카오 문제는 어렵진 않은데 문제를 이해하는 과정이 좀 어렵다. 독해력을 키워야 할 것 같다.