[프로그래머스] 키패드 누르기 (JS)

hhkim·2023년 7월 18일
0

Algorithm - JavaScript

목록 보기
69/188
post-thumbnail

풀이 과정

  1. 숫자를 키, 자리 배열 값을 값으로 하는 객체 만들기
  2. numbers 배열에 대해 반복하면서 값 바꾸기: map()
    이때 매번 왼손, 오른손의 현재 위치 갱신
  3. 1 4 7이면 왼손, 3 6 9면 오른손
  4. 2 5 8 0이면 1번 객체에서 자리 배열 값을 찾아서 두 손의 현재 위치 자리 배열값과 비교
    이때 둘이 같으면 왼손잡이인지 오른손잡이인지 판단

코드

function solution(numbers, hand) {
  let left = 10;
  let right = 11;
  hand = hand === 'left' ? 'L' : 'R';

  return numbers
    .map((n) => {
      if (n % 3 === 1) {
        left = n;
        return 'L';
      } else if (n && n % 3 === 0) {
        right = n;
        return 'R';
      }
      const distL = getDistance(n, left);
      const distR = getDistance(n, right);
      if (distL === distR) {
        left = hand === 'L' ? n : left;
        right = hand === 'R' ? n : right;
        return hand;
      } else if (distL < distR) {
        left = n;
        return 'L';
      } else {
        right = n;
        return 'R';
      }
    })
    .join('');
}

function getDistance(num1, num2) {
  const keypad = {
    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],
    10: [3, 0],
    0: [3, 1],
    11: [3, 2],
  };

  return (
    Math.abs(keypad[num1][0] - keypad[num2][0]) +
    Math.abs(keypad[num1][1] - keypad[num2][1])
  );
}

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

정말 좋은 정보 감사합니다!

답글 달기