본문 바로가기
코딩테스트

[1일1코👨🏻‍💻] Lv.1 키패드 누르기.js - 프로그래머스

by Jacob93 2020. 11. 2.

2020.11.02

출처 : 프로그래머스

📝문제

[2020 카카오 인턴십] 키패드 누르기

소요시간 : 1시간 13분 40초

[

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

](https://programmers.co.kr/learn/courses/30/lessons/67256)

✏️해답

function solution(numbers, hand) {
    let answer = '';
    let L=[4,1];
    let R=[4,3];
    /// 1. numbers 만큼 for문을 돌린다.
    for(let i=0;i<numbers.length;i++){
        /// 2. 1,4,7이 나오면 L
        if(numbers[i]==1 || numbers[i]==4 || numbers[i]==7){
            answer+='L';
            numbers[i]==1 ? L=[1,1] : (numbers[i]==4? L=[2,1]:L=[3,1]);

        }
        /// 3. 3,6,9면 R
        else if(numbers[i]==3 || numbers[i]==6 || numbers[i]==9){
            answer+='R';
            numbers[i]==3 ? R=[1,3] :(numbers[i]==6?R=[2,3]:R=[3,3]);

        }
        /// 4. 2,5,8,0은 L과 R을 기록한다.
        /// 5. 2,5,8,0은 L과 R중에 가까이 있는것을 추가.
        /// 6. 왼손잡이/오른손 잡이인지도 구분.
        else{
            if(numbers[i]==2){
                /// R이 가까운 경우
                if((Math.abs(R[0]-1)+Math.abs(R[1]-2))<(Math.abs(L[0]-1)+Math.abs(L[1]-2))){
                    answer+='R';
                    R=[1,2];
                }else if((Math.abs(R[0]-1)+Math.abs(R[1]-2))>(Math.abs(L[0]-1)+Math.abs(L[1]-2))){
                    answer+='L';
                    L=[1,2];
                }else{
                    if(hand=='left'){
                        answer+='L';
                        L=[1,2];
                    }else{
                        answer+='R';
                        R=[1,2];
                    }
                }
            }else if(numbers[i]==5){
                if((Math.abs(R[0]-2)+Math.abs(R[1]-2))<(Math.abs(L[0]-2)+Math.abs(L[1]-2))){
                    answer+='R';
                    R=[2,2];
                }else if((Math.abs(R[0]-2)+Math.abs(R[1]-2))>(Math.abs(L[0]-2)+Math.abs(L[1]-2))){
                    answer+='L';
                    L=[2,2];
                }else{
                    if(hand=='left'){
                        answer+='L';
                        L=[2,2];
                    }else{
                        answer+='R';
                        R=[2,2];
                    }
                }
            }else if(numbers[i]==8){
                if((Math.abs(R[0]-3)+Math.abs(R[1]-2))<(Math.abs(L[0]-3)+Math.abs(L[1]-2))){
                    answer+='R';
                    R=[3,2];
                }else if((Math.abs(R[0]-3)+Math.abs(R[1]-2))>(Math.abs(L[0]-3)+Math.abs(L[1]-2))){
                    answer+='L';
                    L=[3,2];
                }else{
                    if(hand=='left'){
                        answer+='L';
                        L=[3,2];
                    }else{
                        answer+='R';
                        R=[3,2];
                    }
                }
            }else {
                if((Math.abs(R[0]-4)+Math.abs(R[1]-2))<(Math.abs(L[0]-4)+Math.abs(L[1]-2))){
                    answer+='R';
                    R=[4,2];
                }else if((Math.abs(R[0]-4)+Math.abs(R[1]-2))>(Math.abs(L[0]-4)+Math.abs(L[1]-2))){
                    answer+='L';
                    L=[4,2];
                }else{
                    if(hand=='left'){
                        answer+='L';
                        L=[4,2];
                    }else{
                        answer+='R';
                        R=[4,2];
                    }
                }
            }

        }
    }    
    return answer;
}

회고🧐

음,,,, 뭔가 더 깔끔하게 할 수 있을것 같은데, 시간이 부족했음;;;

댓글