키패드 누르기
https://school.programmers.co.kr/learn/courses/30/lessons/67256
가장 중요한 생각은 각 2,5,8,0 번호를 누를 때 왼엄지를 쓸 지 오른엄지를 쓸 지 결정하는 것일 것이다.
이 때 휴패폰 키패드를 2차원 배열로 각 패드마다 값을 x,y값을 주면 지금 누르고자 하는 키와 왼엄지, 오른엄지의 위치를 구할 수 있게 된다.
이 생각하는게 조금 어려웠다. 다른 분들의 풀이방법도 거의 비슷했다.
function solution(numbers, hand) {
var answer = '';
const table = new Map()
table.set(1, [0,0])
table.set(2, [0,1])
table.set(3, [0,2])
table.set(4, [1,0])
table.set(5, [1,1])
table.set(6, [1,2])
table.set(7, [2,0])
table.set(8, [2,1])
table.set(9, [2,2])
table.set(0, [3,1])
table.set("*", [3,0])
table.set("#", [3,2])
let lPos = [3,0]
let rPos = [3,2]
numbers.map(e => {
if([1,4,7].includes(e)){
answer += 'L'
lPos = table.get(e)
}
else if([3,6,9].includes(e)){
answer += 'R'
rPos = table.get(e)
}
else {
let [x,y] = table.get(e)
let [lx, ly] =lPos
let [rx, ry] = rPos
// console.log(x,y,lx,ly,rx,ry)
// console.log('????',Math.abs(lx-x), Math.abs(ly-y), '//', Math.abs(rx-x), Math.abs(ry-y))
if(Math.abs(lx-x) + Math.abs(ly-y) === Math.abs(rx-x) + Math.abs(ry-y)){
if(hand === 'left'){
answer+="L"
lPos = table.get(e)
}
else {
answer+="R"
rPos = table.get(e)
}
}else{
if(Math.abs(lx-x) + Math.abs(ly-y) < Math.abs(rx-x) + Math.abs(ry-y)){
answer+="L"
lPos = table.get(e)
}
else{
answer+="R"
rPos = table.get(e)
}
}
}
})
return answer;
}