💯 CodingTest/Programmers

[Programmers] (Javascript) 키패드 누르기

S.Honey 2022. 4. 21. 16:18
function solution(numbers, hand) {
    var answer = '';
    var keyPad = new Map([
        ['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]],
    ]);
    var lefthand = '*';
    var righthand = '#';

    for (const num of numbers)
    {
        if (num === 1 || num === 4 || num === 7)
        {
            answer += ('L');
            lefthand = String(num);
        }
        else if (num === 3 || num === 6 || num === 9)
        {
            answer += ('R');
            righthand = String(num);
        }
        else{
                var leftToTarget = Math.abs(keyPad.get(String(num))[0]-keyPad.get(lefthand)[0]) + Math.abs(keyPad.get(String(num))[1]-keyPad.get(lefthand)[1]);
                var rightToTarget = Math.abs(keyPad.get(String(num))[0]-keyPad.get(righthand)[0]) + Math.abs(keyPad.get(String(num))[1]-keyPad.get(righthand)[1]);

                if (leftToTarget < rightToTarget)
                {
                    answer += ('L');
                    lefthand = String(num);
                }
                else if (leftToTarget > rightToTarget)
                {
                    answer += ('R');
                    righthand = String(num);
                }
                else
                {
                    if (hand === 'left')
                    {
                        answer += 'L';
                        lefthand = String(num);
                    }
                    else
                    {
                        answer += 'R';
                        righthand = String(num);
                    }
                }
        }
    }

    return answer;
}