프로그래머스 Lv.1 [2020 카카오 인턴십] - 키패드 누르기 (정답률 하위 TOP 6)

세나정·2023년 5월 5일
0

문제


풀이

function solution(numbers, hand) {
    var answer = '';
    let left = '*';
    let right = '#';
    
    for (let i of numbers) {
        if (i === 1 || i === 4 || i === 7) {
            answer += 'L';
            left = i;
        }else if (i === 3 || i === 6 || i === 9) {
            answer += 'R';
            // Right에서도 손가락 위치값을 1, 4, 7로 맞추기 위해 -2
            right = i - 2;
            
        } else { // 0 2 5 8 일 때 
            // 왼손 오른손의 위치를 계산 - 2차원 배열로 return 받음
            let l = findKey(left);
            let r = findKey(right);            
                        
            console.log(r, l)
            
            // // 0 2 5 8의 위치값도 계산 되어 나옴
            let middle = findKey(i);
            
            // 손위치와 눌러야할 키패드 거리 구하기
            // 각 2차원 배열의 인덱스의 합을 계산
            let distanceR = Math.abs(r[0] - middle[0]) + Math.abs(r[1] - middle[1]);
            let distanceL = Math.abs(l[0] - middle[0]) + Math.abs(l[1] - middle[1]);
            
            if (distanceR === distanceL) { // 거리가 같다면 오른손잡이 -> 'R', 왼손잡이 -> 'L'
                hand === 'right' ? (right = i, answer += 'R') : (left = i, answer += 'L');
            } else if(distanceL < distanceR) { // 오른손의 거리가 더 멀다면
                answer += 'L';
                left = i;
            } else { // 왼손의 거리가 더 멀다면
                answer += 'R';
                right = i;
            }
        }
    }
    return answer;
}

// 위치 계산함수
function findKey(key) {
    let keypad = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']];

    for (let i = 0; i < 4; i++) {
        for (let j = 0; j < 3; j++) {
            if (keypad[i][j] === key) {
                return [i, j];
            }
        }
    }
}
profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글