과거에는 못 풀었던 문제 다시 풀어봄
function solution(numbers, hand) {
var answer = '';
let keypad = [
[1,2,3],
[4,5,6],
[7,8,9],
['*',0,'#']
];
let obj = {
'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],
};
let dr = [-1,0,1,0];
let dc = [0,-1,0,1];
let leftStart = [3,0];
let rightStart = [3,2];
const test = num => {
let target = obj[num];
if(num === 1 || num === 4 || num === 7){
let leftLen = Math.abs(target[0]-leftStart[0]) + Math.abs(target[1]-leftStart[1]);
leftStart[0]= target[0];
leftStart[1]= target[1];
answer = answer.concat('L');
}
else if(num === 3 || num === 6 || num === 9){
let rightLen = Math.abs(target[0]-rightStart[0]) + Math.abs(target[1]-rightStart[1]);
rightStart[0]= target[0];
rightStart[1]= target[1];
answer = answer.concat('R');
}
else {
let leftLen = Math.abs(target[0]-leftStart[0]) + Math.abs(target[1]-leftStart[1]);
let rightLen = Math.abs(target[0]-rightStart[0]) + Math.abs(target[1]-rightStart[1]);
if(leftLen < rightLen){
leftStart[0]= target[0];
leftStart[1]= target[1];
answer = answer.concat('L');
}
else if(leftLen > rightLen){
rightStart[0]= target[0];
rightStart[1]= target[1];
answer = answer.concat('R');
}
else {
if(hand==='left'){
leftStart[0]= target[0];
leftStart[1]= target[1];
answer = answer.concat('L');
}
else if(hand==='right'){
rightStart[0]= target[0];
rightStart[1]= target[1];
answer = answer.concat('R');
}
}
}
}
numbers.forEach(number=>{
test(number);
});
return answer;
}
코드 블록을 함수를 활용해서 구현하는 습관, 미리 코드를 작성하기 전 주석으로 간단하게 표시해 두는 습관을 다시 연습하자
풀 수 있지만, 다음에는 시간을 줄여야 한다.