본문 바로가기

프로그램 강좌

[프로그래머스]키패드 누르기 - javascript

레벨 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