function solution(numbers, hand) {
let answer = []
// 2D Array
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 leftHand = keypad['*'];
let rightHand = keypad['#'];
const calDistance = (currentPos, targetPos) => {
const row = Math.abs(currentPos[1] - targetPos[1])
const col = Math.abs(currentPos[0] - targetPos[0])
return row+col
}
for(let i=0; i<numbers.length; i++){
const target = numbers[i];
const targetPos = keypad[target]
if (target === 1 || target === 4 || target === 7) {
answer[i] = "L"
leftHand = targetPos
} else if(target === 3 || target === 6 || target === 9){
answer[i] = "R"
rightHand = targetPos
} else {
const leftDis = calDistance(leftHand, targetPos)
const rightDis = calDistance(rightHand, targetPos)
const diff = leftDis - rightDis
if(diff < 0){
answer[i] = "L"
leftHand = targetPos
}
if(diff > 0){
answer[i] = "R"
rightHand = targetPos
}
if(diff === 0){
if(hand==='left'){
answer[i] = "L"
leftHand = targetPos
} else {
answer[i] = "R"
rightHand = targetPos
}
}
}
}
return answer.join("")
}
- 키패드 숫자의 각 position을 2차원으로 만들어서 거리 계산
반응형
'알고리즘 > javascript' 카테고리의 다른 글
[프로그래머스] 코딩테스트연습 > 예상 대진표 (0) | 2021.10.21 |
---|---|
[프로그래머스] 코딩테스트연습 > 크레인 인형뽑기 게임 (0) | 2021.10.11 |
[프로그래머스] 코딩테스트연습 > 숫자 문자열과 영단어 (0) | 2021.09.30 |
[프로그래머스] 코딩테스트연습 > 신규아이디 추천 (0) | 2021.09.29 |
[프로그래머스] 코딩테스트연습 > 로또의 최고 순위와 최저 순위 (0) | 2021.09.29 |