[Lv1]키패드 누르기

HeeJin.log·2021년 7월 10일
0

코딩 테스트

목록 보기
5/10
post-thumbnail

0.문제설명

키패드에서 눌려야 할 문자열 numbers에 맞춰 어떤 손으로 눌러야 하는지 출력한다.

1.문제풀이

양 끝의 숫자들은 눌러야 하는 손이 정해져 있기 때문에 고려를 크게 안해도 되지만, 가운데 숫자의 현재 손과의 거리와 같았을 때 어떤 손으로 눌러야 할지를 알기위해 다음 숫자를 누를때 마다 현재 위치를 저장하여 비교하였단.

2.코드

function solution(numbers, hand) {
       
  
    let numbersArray = [];
    let currentL=[4,1];
    let currentR=[4,3];
 
   numbers.forEach(function(element,index){
       if(element === 1) numbersArray.push([1,1]);
       if(element === 2) numbersArray.push([1,2]);
       if(element === 3) numbersArray.push([1,3]);
       if(element === 4) numbersArray.push([2,1]);
       if(element === 5) numbersArray.push([2,2]);
       if(element === 6) numbersArray.push([2,3]);
       if(element === 7) numbersArray.push([3,1]);
       if(element === 8) numbersArray.push([3,2]);
       if(element === 9) numbersArray.push([3,3]);
       if(element === 0) numbersArray.push([4,2]);
       
   })

    
    function distance(inputBtn,handL, handR){
        const distanceL = Math.abs(inputBtn[0]-handL[0])+Math.abs(inputBtn[1]-handL                           [1]);
        const distanceR = Math.abs(inputBtn[0]-handR[0])+Math.abs(inputBtn[1]-handR                           [1]);
        return distanceR - distanceL;
    }
    
  
    let result="";
    for(let i=0;i<numbers.length; i++){
        
        if(numbers[i] === 1||numbers[i] === 4||numbers[i] === 7){
            result = result + "L";
            currentL = numbersArray[i];
        }
        if(numbers[i] === 3||numbers[i] === 6||numbers[i] === 9){
            result = result + "R";
            currentR = numbersArray[i];
        }
           
        if(numbers[i] === 2||numbers[i] === 5||numbers[i] === 8||numbers[i] ===0){
            let distanceResult = distance(numbersArray[i],currentL,currentR);
            if( distanceResult === 0){
                    if(hand === "left"){
                        result = result + "L";
                        currentL = numbersArray[i];
                    }else if(hand === "right"){
                         result = result + "R";
                         currentR = numbersArray[i];
                    } 
            } else if(distanceResult >0 ){
                result = result + "L";
                currentL = numbersArray[i];
            }else{
                 result = result + "R";
                currentR = numbersArray[i];
            }
            
        }

    }

    return result;
}

3.후기

화이팅!

0개의 댓글