[프로그래머스] Lv1. 키패드 누르기- JavaScript

이상돈·2023년 7월 21일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 1

출처 : 프로그래머스 - 키패드 누르기

문제

제한사항

📌 내가 생각한 풀이

1,4,7일 경우는 무조건 'L' 3,6,9일 경우는 무조건 'R'이다. 2,5,8,0 일경우엔 왼손위치와 오른손의 위치를 비교하여 더 짧은 거리로 누르면 된다.
function solution(numbers, hand) {
  var answer = "";
  let 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],
    "*": [3, 0],
    0: [3, 1],
    "#": [3, 2],
  };
  let left = keyPad["*"];
  let right = keyPad["#"];
  numbers.forEach((data, idx) => {
    if (data === 1 || data === 4 || data === 7) {
      answer += "L";
      left = keyPad[data];
    } else if (data === 3 || data === 6 || data === 9) {
      answer += "R";
      right = keyPad[data];
    } else {
      let lDistance = 0;
      let rDistance = 0;
      let val = keyPad[data];
      lDistance = Math.abs(left[0] - val[0]) + Math.abs(left[1] - val[1]);
      rDistance = Math.abs(right[0] - val[0]) + Math.abs(right[1] - val[1]);
      if (lDistance < rDistance) {
        answer += "L";
        left = val;
      } else if (lDistance > rDistance) {
        answer += "R";
        right = val;
      } else {
        if (hand === "left") {
          answer += "L";
          left = val;
        } else {
          answer += "R";
          right = val;
        }
      }
    }
  });
  return answer;
}

📌 느낀점

주어진 문제조건을 잘읽고 침착하게 풀기만 하면 쉽게 풀리는 구현문제였다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글