[JavaScript][Programmers] 키패드 누르기

조준형·2021년 8월 9일
0

Algorithm

목록 보기
58/142
post-thumbnail

🔎 키패드 누르기

❓ 문제링크

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

📄 제출 코드


const phone = {
    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],
}
function solution(numbers, hand) {
    let leftH = '*';
    let rightH = '#';
    let answer = '';
    let len = numbers.length;
    for (let i = 0; i < len; i++) {
        switch (numbers[i]) {
            case 1: case 4: case 7:
                answer += 'L';
                leftH = numbers[i];
                break;
            case 3: case 6: case 9:
                answer += 'R';
                rightH = numbers[i];
                break;
            case 2: case 5: case 8: case 0:
                let arrow = calculate(numbers[i], leftH, rightH, hand);
                answer += arrow;
                arrow == 'R' ? rightH = numbers[i] : leftH = numbers[i];
                break;
        }
    }

    
    return answer;
}
function calculate(number, leftH, rightH, hand) {
    let middle = phone[number];
    let left = phone[leftH];
    let right = phone[rightH];
    hand == 'left' ? hand = 'L' : hand = 'R';
    let left_distance = Math.abs(left[0] - middle[0]) + Math.abs(left[1] - middle[1]);
    let right_distance = Math.abs(right[0] - middle[0]) + Math.abs(right[1] - middle[1]);
    console.log(`l : ${left_distance}, r : ${right_distance}`)
    if (left_distance > right_distance) return 'R';
    else if (left_distance < right_distance) return 'L';
    else return hand;
}
// let numbers = [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5];
// let hand = "right";
let numbers = [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2];
let hand = "left";
console.log(solution(numbers, hand));
/*
1 2 3
4 5 6
7 8 9
* 0 #
*/

생각보다 해맷던 문제이다.
우선 들어오는 숫자에 따라 L인지 R인지 추가해주고, 가운데 라인의 경우 계산하는 calculate로 L인지 R인지 계산해서 return해주려 했다.
근데 문제가 위의 설명만 읽고 아 거리구하는 문제구나 라고 생각하여 calculate에서 거리 계산하는 공식으로 풀었는데 13 - 20까지 테스트케이스가 다틀렸다고 나왔다.
내가 공식을 잘못썻나? 하고 console로 찍어보며 하나하나 다 확인해보고, 모르겠어서 질문게시판에 가서 해결책을 얻었다.
이번 문제는 두 점 사이의 거리가 거리가 아니고 1칸씩 이동했을 때의 거리다.
아래 설명들을 잘 읽어보면 소수점이 나와야될부분이 1칸씩이동한 크기로 설명이 나와있다.

profile
깃허브 : github.com/JuneHyung

0개의 댓글