알고리즘(Algorithm)
프로그래머스 - 키패드 누르기 [JS]
Hun-bot
2023. 1. 16. 12:39
728x90
반응형
풀이
keypad를 배열로 만들면 반복문을 사용해야한다는 단점이 있기에 객체로 만들어서
각 손가락 위치에 해당하는 값들을 계산해 비교 -> finger
function solution(numbers, hand) {
let res=[]
const keypad = {
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 currentLeftFinger='*'
let currentRightFinger='#'
const helper=(lf,rf,num)=>{
const left=Math.abs(keypad[lf][0]-keypad[num][0])+Math.abs(keypad[lf][1]-keypad[num][1])
const right=Math.abs(keypad[rf][0]-keypad[num][0])+Math.abs(keypad[rf][1]-keypad[num][1])
if(left===right) return hand==="right" ? "R":"L"
return left > right ? "R":"L"
}
for (let i = 0; i < numbers.length; i++) {
if(numbers[i]===1||numbers[i]===4||numbers[i]===7){
res.push("L")
currentLeftFinger=numbers[i]
}
else if(numbers[i]===3||numbers[i]===6||numbers[i]===9){
res.push("R")
currentRightFinger=numbers[i]
}
else{
let finger=helper(currentLeftFinger,currentRightFinger,numbers[i])
if(finger==='L') currentLeftFinger=numbers[i]
if(finger==='R') currentRightFinger=numbers[i]
res.push(finger)
}
}
return res.join('')
}
solution([1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5],"right")
728x90
반응형