레벨 1이라고 우습게 봤다가 감을 못잡았었는데, 풀이를 보고 나니 쉽게 이해가 되네요.
다시 풀면 잘 풀 수 있을것 같습니다.
function solution(numbers, hand) {
var answer = '';
const key = { //키패드 위치 수치화
1: [0,3], 2:[1,3], 3:[2,3],
4: [0,2], 5:[1,2], 6:[2,2],
7: [0,1], 8:[1,1], 9:[2,1],
'*': [0,0], 0:[1,0], '#':[2,0]
}
const len = numbers.length;
// 현재 키 위치
let handL = '*';
let handR = '#';
for(let i=0;i<len;i++){
let num = numbers[i];
if(num%3===1){ //1,4,7
answer+='L';
handL=num;
} else if(num%3===0 && num!==0){ // 3,6,9
answer+='R';
handR=num;
}
else{
answer+=dis(key, num, hand, handL, handR);
answer[answer.length-1]=== 'L'
? handL=num
: handR=num;
}
}
return answer;
}
function dis(key, num, hand, handL, handR){
const handed = hand === 'left'? 'L':'R';
// 거리 계산
const left =
Math.abs(key[num][0]-key[handL][0])+
Math.abs(key[num][1]-key[handL][1]);
const right =
Math.abs(key[num][0]-key[handR][0])+
Math.abs(key[num][1]-key[handR][1]);
// 거리 같다면 손잡이 우선
if(left===right) return handed;
// 거리 차이 난다면
return left<right ? 'L':'R';
}
728x90
'프로그램 강좌' 카테고리의 다른 글
MySQL8 설치 방법 (0) | 2022.03.10 |
---|---|
[react]react-bootstrap 설치 방법 (0) | 2022.01.08 |
[프로그래머스]신규아이디 -javascript (0) | 2021.12.16 |
[javascript]padEnd (0) | 2021.12.15 |
[React]Warning: Using UNSAFE_componentWillMount in strict mode... (0) | 2021.12.11 |