알고리즘 - 키패드 누르기

HoJeong Im·2021년 9월 19일
0

Break_Algo

목록 보기
8/46

문제

  • 링크

  • 과거에는 못 풀었던 문제 다시 풀어봄

코드

function solution(numbers, hand) {
    var answer = '';
    
    let keypad = [
        [1,2,3],
        [4,5,6],
        [7,8,9],
        ['*',0,'#']
    ];
    
    let obj = {
        '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 dr = [-1,0,1,0];
    let dc = [0,-1,0,1];
    
    let leftStart = [3,0];
    let rightStart = [3,2];
    
    const test = num => {
        
        let target = obj[num];
        
        if(num === 1 || num === 4 || num === 7){
            let leftLen = Math.abs(target[0]-leftStart[0]) + Math.abs(target[1]-leftStart[1]);
            leftStart[0]= target[0];
            leftStart[1]= target[1];
            answer = answer.concat('L');
        }
        else if(num === 3 || num === 6 || num === 9){
            let rightLen = Math.abs(target[0]-rightStart[0]) + Math.abs(target[1]-rightStart[1]);
            rightStart[0]= target[0];
            rightStart[1]= target[1];
            answer = answer.concat('R');
        }
        else {
            let leftLen = Math.abs(target[0]-leftStart[0]) + Math.abs(target[1]-leftStart[1]);
            let rightLen = Math.abs(target[0]-rightStart[0]) + Math.abs(target[1]-rightStart[1]);
            if(leftLen < rightLen){
                leftStart[0]= target[0];
                leftStart[1]= target[1];
                answer = answer.concat('L');
            }
            else if(leftLen > rightLen){
                rightStart[0]= target[0];
                rightStart[1]= target[1];
                answer = answer.concat('R');
            }
            else {
                if(hand==='left'){
                    leftStart[0]= target[0];
                    leftStart[1]= target[1];
                    answer = answer.concat('L');
                }
                else if(hand==='right'){
                    rightStart[0]= target[0];
                    rightStart[1]= target[1];
                    answer = answer.concat('R');
                }
            }
            
        }
        
    }

    numbers.forEach(number=>{
        test(number);   
    });
    
    return answer;
}

회고

  • 코드 블록을 함수를 활용해서 구현하는 습관, 미리 코드를 작성하기 전 주석으로 간단하게 표시해 두는 습관을 다시 연습하자

  • 풀 수 있지만, 다음에는 시간을 줄여야 한다.

profile
꾸준함이 제일 빠른 길이었다

0개의 댓글