코딩 테스트/프로그래머스 level1
키패드 누르기
fullfish
2022. 8. 11. 19:20


처음에는 아래 코드와 같이 현재 손가락의 위치와 주어진 숫자의 차이로 구해보려고했다
첫 코드
function solution(numbers, hand) {
let result = "";
let nowL = 10;
let nowR = 12;
for (let i = 0; i < numbers.length; i++) {
result += check(numbers[i], hand);
}
return result;
}
const check = (num, hand) => {
console.log(nowL, nowR);
if (num === 1 || num === 4 || num === 7) {
nowL = num;
return "L";
} else if (num === 3 || num === 6 || num === 9) {
nowR = num;
return "R";
} else {
if (Math.abs(num - nowL) > Math.abs(num - nowR)) {
numR = num;
return "R";
} else if (Math.abs(num - nowL) < Math.abs(num - nowR)) {
numL = num;
return "L";
} else {
if (hand === "right") {
numR = num;
return "R";
} else {
numL = num;
return "L";
}
}
}
};
그러다가 계속 막혀서 아예 다른방법인
각 숫자의 좌표평면상의 좌표(배열의 인덱스)를 구해서
멘하탄 거리로 계산을 해서 풀었다
코드
function solution(numbers, hand) {
let result = "";
let matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 0, 11],
];
let nowL = [3, 0];
let nowR = [3, 2];
const check = (num, hand) => {
const findLength = (num, finger) => {
let numArr = findIndex(num);
return Math.abs(finger[0] - numArr[0]) + Math.abs(finger[1] - numArr[1]);
};
if (num === 1 || num === 4 || num === 7) {
nowL = findIndex(num);
return "L";
} else if (num === 3 || num === 6 || num === 9) {
nowR = findIndex(num);
return "R";
} else {
if (findLength(num, nowL) > findLength(num, nowR)) {
nowR = findIndex(num);
return "R";
} else if (findLength(num, nowL) < findLength(num, nowR)) {
nowL = findIndex(num);
return "L";
} else {
if (hand === "right") {
nowR = findIndex(num);
return "R";
} else {
nowL = findIndex(num);
return "L";
}
}
}
};
const findIndex = (num) => {
for (let i = 0; i < matrix.length; i++) {
if (matrix[i].indexOf(num) !== -1) return [i, matrix[i].indexOf(num)];
}
};
for (let i = 0; i < numbers.length; i++) {
result += check(numbers[i], hand);
}
return result;
}