[프로그래머스 level1] 카카오인턴_키패드 누르기

김예지·2021년 10월 14일
1

문제

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


문제 풀이

코드

function distance(a, b){
    return Math.abs(a[0]-b[0])+Math.abs(a[1]-b[1]);
}
function solution(numbers, hand) {
    let answer='';
    let handShort=hand[0].toUpperCase();
    const pos={
      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 posL=pos['*'];
    let posR=pos['#'];
    for(let i=0; i<numbers.length; i++){
        if(numbers[i]%3===1){
            answer+='L';
            posL=pos[numbers[i]];
        }
        else if(numbers[i]%3===0 && numbers[i]!==0){
            answer+='R';
            posR=pos[numbers[i]];
        }
        else{
            const leftDis=distance(pos[numbers[i]], posL);
            const rightDis=distance(pos[numbers[i]], posR)
            if(leftDis>rightDis){
                answer+='R';
                posR=pos[numbers[i]];
            }
            else if(leftDis<rightDis){
                answer+='L';
                posL=pos[numbers[i]];
            }
            else{
                answer+=handShort;
                if(handShort==='R') posR=pos[numbers[i]];
                else if(handShort='L') posL=pos[numbers[i]];
            }
        }   
    } 
    return answer;
}

처음에는 어떻게 접근해야할지 막막해서, 구글링해서 해설을 봐도 모르겠더라... 영상 자료는 조금 낫지 않을까 싶어서 유튜브에서 해설영상을 봤다. 전체를 다 보진 않았고, 접근 방식만 파악했다.
객체를 사용해서 키패드 각각을 모두 좌표화 하고, (x1, x2)-(y1, y2) 사이의 거리를 |x1-x2|+|y1-y2|로 구할 수 있었다. 거리를 구하는 함수는 따로 만들어줬다.
복잡하고 어려워보이는 문제였지만, 원리를 파악하니까 그렇게 어렵지는 않았다. 객체 사용에 익숙해지자!

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

1개의 댓글

comment-user-thumbnail
2021년 10월 26일

10/26
원리알면 차근차근 풀면 되는 문제! 다시 풀어보기

답글 달기