키패드 누르기 - javascript

DonQ·2022년 3월 29일
1

CodingTest

목록 보기
8/33
post-thumbnail

문제 (출처)

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

나의 접근

  • 역시 카카오 관련 문제들은 어렵다...

  • 거리를 어떻게 구할까 고민하다가 결국 다른사람들의 풀이를 참고 하였다.

  • 이번 기회로 거리 구하기에 대해 알았으니, 다음에는 꼭 내 힘으로 풀리라 !! 오늘의 배운점 및 교훈에서 좀 더 길게 써보겠드아!

풀이

function solution(numbers, hand) {
    let answer = '';
    let lH = '*';
    let rH = '#';
    const pos = {
        1 : [0, 0], 2 : [1, 0], 3 : [2, 0],
        4 : [0, 1], 5 : [1, 1], 6 : [2, 1],
        7 : [0, 2], 8 : [1, 2], 9 : [2, 2],
        '*' : [0, 3], 0 : [1, 3], '#' : [2, 3]
    };
    function dist (num, lH, rH, pos, hand){
        let dist_L = Math.abs(pos[lH][0] - pos[num][0]) + 
                    Math.abs(pos[lH][1] - pos[num][1]);
        let dist_R = Math.abs(pos[rH][0] - pos[num][0]) + 
                    Math.abs(pos[rH][1] - pos[num][1]);
        if(dist_L === dist_R){
            return hand === 'left' ? 'L' : 'R'
        }
        return dist_L < dist_R ? 'L' : 'R';
    }
    for (let num of numbers){
        if (num % 3 === 1){
            answer += 'L';
            lH = num;
        }
        else if (num != 0 && num % 3 === 0){
            answer += 'R';
            rH = num;
        }
        else {
            answer += dist(num, lH, rH, pos, hand);
            answer[answer.length - 1] === 'L' ? lH = num : rH = num
        }
    }
   
    return answer;
}

오늘의 배운점 및 교훈

  • 패드간의 거리를 구하기 위해서 패드마다 x축 y축을 지정해주고, 서로 빼준다음 절대값을 씌우고 더해주면 된다는 것을 알게되었다.
    다음에도 거리 구하기 문제가 나온다면 절대 당황하지 말아야겠다.

  • 삼항조건연산자가 정말 많이 쓰인다... 또한 삼항조건연사자를 쓰면 굉장히 깔끔하게 한줄로 끝난다 .. 보기 좋다 ..

  • 내가 원하는 정보를 가져오기 위해 어떤 변수를 지정 해야하는지 설정하는것도 매우 중요하다 ... 이러한 능력은 코테문제 계속 풀다보면 나아지겠지... 나아질꺼야 ....
    나아질꺼야

profile
꾸준히 쌓아가는 코딩 Study

0개의 댓글