https://programmers.co.kr/learn/courses/30/lessons/67256
Lv1 중에서 가장 헤맸던 문제이다.
풀긴 풀었는데 중복되는 코드도 있고 썩 마음에 들지 않아서 다른 사람들의 풀이를 찾아봤다. 그중에 가장 마음에 드는 코드로 한번 바꾸어 보았다.
방법은 객체를 사용하는 것인데, 키패드를 객체의 키로, 각 버튼의 좌표를 객체의 값으로 만드는 것이다.
버튼과 버튼과의 거리는 x 좌표의 차 + y 좌표의 차로 계산한다.
function solution(numbers, hand) {
var answer = '';
let left = '*', right = '#';
let 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],
'*':[3,0], 0:[3,1], '#':[3,2]
}
function dist(x, y) {
let dx = Math.abs(x[0] - y[0]);
let dy = Math.abs(x[1] - y[1]);
return dx + dy;
}
for (let n of numbers) {
if (n === 1 || n === 4 || n === 7) {
answer += 'L';
left = n;
}
else if (n === 3 || n === 6 || n === 9) {
answer += 'R'
right = n;
}
else {
let leftd = dist(keypad[n], keypad[left])
let rightd = dist(keypad[n], keypad[right])
if (leftd < rightd) {
answer += 'L'
left = n;
}
else if (leftd > rightd) {
answer += 'R'
right = n;
}
else {
if (hand === "left") {
answer += 'L';
left = n;
}
else {
answer += 'R';
right = n;
}
}
}
}
return answer;
}