하루에 한 문제

[프로그래머스 2020 카카오 인턴십] 키패드 누르기 -JavaScript 본문

알고리즘/프로그래머스

[프로그래머스 2020 카카오 인턴십] 키패드 누르기 -JavaScript

dkwjdi 2021. 5. 7. 23:52

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

 

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

[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

function solution(numbers, hand) {
    var answer = '';
    
    hand=hand.replace("right","R").replace("left","L");
    
    let left='*';
    let right='#';
    let point={};
    
    keyPadIndex(point); // 각 키의 위치 저장
    
    for (let i = 0; i < numbers.length; i++){
        if(numbers[i]!=0 &&numbers[i]%3==0) {
            answer+="R";
            right=numbers[i];
        }
        else if(numbers[i]!=0 &&(numbers[i]-1)%3==0) {
            answer+="L";
            left=numbers[i];
        }
        else{
            let leftDir=dir(numbers[i], left);
            let rightDir=dir(numbers[i], right)
            
            if(leftDir==rightDir){
                answer+=hand;
                if(hand=='R') right=numbers[i];
                else left=numbers[i];
            }
            else if(leftDir>rightDir){
                answer+='R';
                right=numbers[i];
            }
            else{
                answer+="L";
                left=numbers[i];
            }
        }
    }
    
    function dir( a,  b){
        return Math.abs(point[a][0]-point[b][0])+Math.abs(point[a][1]-point[b][1]);
    }
    
    function keyPadIndex(point){
        let num=1;
        for(let i=0; i<3; i++){
            for(let j=0; j<3; j++){
                point[num++]=[i,j];
            }
        }
        point[0] = [3, 1];
        point['*'] = [3, 0];
        point['#'] = [3, 2];
    }
    
    return answer;
}

 

소요시간 : 40분

 

우선 로직을 살펴보면

 

1. point라는 객체를 만들어서 각 키패드의 좌표를 저장해준다.

2. 1,4,7 은 왼손클릭

3. 3,6,9 는 오른손클릭

4. 2,5,8,0 은 왼손, 오른손중 가까운 손으로 클릭

 

이게 끝인 문제입니다...근데 147, 369 골라내는 과정에서 0을 생각안하고 아래와같이 코드를 짜다가...

0이 자꾸 2번째 else if문에 들어가서 이거 찾는다고 고생좀 했습니다...ㅎㅎ

 

 

Comments