// 키패드 가운데 번확 있을 경우 거리비교하는 함수
function dist(input, left, right, hand) {
const pad = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
["*", 0, "#"],
]
let target = []
let leftIndex = []
let rightIndex = []
for (let i = 0; i < pad.length; i++) {
for (let j = 0; j < pad[i].length; j++) {
if (input === pad[i][j]) {
target.push(i)
target.push(j)
}
if (left === pad[i][j]) {
leftIndex.push(i)
leftIndex.push(j)
}
if (right === pad[i][j]) {
rightIndex.push(i)
rightIndex.push(j)
}
}
}
const leftDist =
Math.abs(leftIndex[0] - target[0]) + Math.abs(leftIndex[1] - target[1])
const rightDist =
Math.abs(rightIndex[0] - target[0]) + Math.abs(rightIndex[1] - target[1])
if (rightDist > leftDist) {
return "L"
} else if (rightDist < leftDist) {
return "R"
} else if (rightDist === leftDist) {
if (hand === "right") return "R"
else return "L"
}
}
function solution(numbers, hand) {
let res = ""
let left = "*"
let right = "#"
for (let i = 0; i < numbers.length; i++) {
if (
numbers[i] === 1 ||
numbers[i] === 4 ||
numbers[i] === 7 ||
numbers[i] === "*"
) {
res += "L"
left = numbers[i]
} else if (
numbers[i] === 3 ||
numbers[i] === 6 ||
numbers[i] === 9 ||
numbers[i] === "#"
) {
res += "R"
right = numbers[i]
} else if (
numbers[i] === 2 ||
numbers[i] === 5 ||
numbers[i] === 8 ||
numbers[i] === 0
) {
const temp = dist(numbers[i], left, right, hand)
if (temp === "L") {
left = numbers[i]
res += temp
} else {
right = numbers[i]
res += temp
}
}
}
var answer = res
return answer
}
solution([1, 2, 3, 4, 5, 6, 7, 8, 9, 0], "right")
1,4,7,*
인 경우 무조건 'L'을 추가
3,6,9,#
인 경우 무조건 'R'을 추가
키패드 가운데인 경우 target번호인 numbers[i]
,
현재 누르고 있는 left
,right
,
같을 경우 반환에 필요한 값인 hand
들을 dist
함수에 매개변수로 넣는다.
매개변수 각각의 인덱스를 구하고, (x1-x2) + (y1-y2)
값을 구하면 target번호까지의 거리를 구할 수 있다. left
, right
각각 비교한 후 L 또는 R을 반환한다.
같은 경우는 hand
를 참고해서 반환한다.