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

728x90
반응형

현재 풀이 

 

function solution(numbers, hand) {
    const phone={
    };
    for(let i=0;i<9;i++){
        phone[i+1]=[parseInt(i/3),i%3];
    }
    phone["*"]=[3,0];
    phone[0]=[3,1];
    phone["#"]=[3,2];
    var answer = '';
    let left=phone["*"];
    let right=phone["#"];
    for(let i=0;i<numbers.length;i++){
        let cur=numbers[i];
        if(cur===1 || cur===4 || cur===7){
            answer+='L';
            left=phone[cur];
        }else if(cur===3 || cur===6 || cur===9){
            answer+='R';
            right=phone[cur];
        }else{
            let [y,x]=phone[cur];
            let ldiff=Math.abs(y-left[0])+Math.abs(x-left[1]);
            let rdiff=Math.abs(y-right[0])+Math.abs(x-right[1]);
            if(ldiff>rdiff){
                answer+='R';
                right=phone[cur];
            }else if(ldiff<rdiff){
                answer+='L';
                left=phone[cur];
            }else{
                if(hand==="left"){
                    answer+="L";
                    left=phone[cur];
                }else{
                    answer+="R";
                    right=phone[cur];
                }
            }
        }
    }
    return answer;
}

 

 

 

--- 이전 풀이 

아주 용썼다...

각 숫자의 키패드의 위치를 배열에 저장하여 객체에 집어 넣은 후 거리를 계산한다. 

function solution(numbers, hand) {
    const keypad={};
    let start=1;//0=>11
    for(let i=0;i<4;i+=1){
        for(let j=0;j<3;j+=1){
            keypad[start++]=[i,j];
        }
    }
    var answer = '';
    let left=keypad[10];//*
    let right=keypad[12];//#
    for(let i=0;i<numbers.length;i+=1){
        let current=+numbers[i];
        if(current===0)current=11;
        if(keypad[current][1]===0){
            answer+='L';
        }else if(keypad[current][1]===2){
             answer+='R';
        }
        else{
let left_sum=Math.abs(left[0]-keypad[current][0])+Math.abs(left[1]-keypad[current][1]);
let right_sum=Math.abs(right[0]-keypad[current][0])
+Math.abs(right[1]-keypad[current][1]);
if(left_sum<right_sum){
   answer+='L';
}else if(left_sum>right_sum){
    answer+='R';
}else{
    if(hand==='left'){
        answer+='L';     
    }else {answer+='R';}
}  
        }
          if(answer[i]=='L'){
                left=keypad[current];
            }else{
                right=keypad[current];
            }
    }
    
    return answer;
}
728x90
반응형
TAGS.

Comments