function solution(numbers, hand) {
var answer = '';
let leftX = 0, leftY = 3, rightX = 2, rightY = 3;
let positionX = [1,0,1,2,0,1,2,0,1,2];
let positionY = [3,0,0,0,1,1,1,2,2,2];
function moveLeft(num) {
answer +="L";
leftX = positionX[num];
leftY = positionY[num];
}
function moveRight(num) {
answer +="R";
rightX = positionX[num];
rightY = positionY[num];
}
numbers.forEach((num) =>{
if(num === 1 || num === 4 || num === 7) {
moveLeft(num)
} else if(num === 3 || num === 6 || num === 9) {
moveRight(num)
} else {
const distanceL = Math.abs(positionX[num] - leftX) + Math.abs(positionY[num] -leftY);
const distanceR = Math.abs(positionX[num] - rightX) + Math.abs(positionY[num] -rightY);
if(distanceL < distanceR) {
moveLeft(num)
} else if(distanceL > distanceR) {
moveRight(num)
} else {
if(hand === 'left') {
moveLeft(num)
} else {
moveRight(num)
}
}
}
});
return answer;
}
예전에 카카오 인턴십에 지원했을 때 풀어봤던 문제였다. 그때도 좌표를 이용해서 풀었던 거 같은데 그때는 모든 경우를 그냥 if 처리를 했던 거 같다. 각 번호에 좌표 값을 줘서 positionX,Y
변수로 만들었고 현재 left
, right
의 좌표로부터 거리를 계산해줬다. 지금 코드가 모든 경우를 if처리했을 때 보다는 낫지 않을까 싶은데🤔 최적인지는 모르겠다.