[TIL] 22.09.28

Xyan·2022년 9월 27일
0

TIL

목록 보기
1/7
post-thumbnail

프로그래머스 - 2020 카카오 인턴십 - 키패드 누르기

문제 링크

function solution(numbers, mhand) {
  let lhand = [3, 0];
  let rhand = [3, 2];
  let handArr = '';
  numbers = numbers
    .map((x) => (x === 0 ? 11 : x))
    .map((x) => [parseInt(x / 3), (x % 3) - 1])
    .map((x) => (x[1] === -1 ? [x[0] - 1, 2] : x));

  numbers.forEach((x) => {
    if (x[1] === 0) {
      lhand = x;
      handArr += 'L';
    } else if (x[1] === 2) {
      rhand = x;
      handArr += 'R';
    } else if (lhand === x) {
      handArr += 'L';
    } else if (rhand === x) {
      handArr += 'R';
    } else {
      let lGap = Math.abs(x[0] - lhand[0]) + Math.abs(x[1] - lhand[1]);
      let rGap = Math.abs(x[0] - rhand[0]) + Math.abs(x[1] - rhand[1]);
      if (lGap === rGap) {
        if (mhand === 'left') {
          lhand = x;
          handArr += 'L';
        } else {
          rhand = x;
          handArr += 'R';
        }
      } else if (lGap < rGap) {
        lhand = x;
        handArr += 'L';
      } else {
        rhand = x;
        handArr += 'R';
      }
    }
  });

  return handArr;
}

결국 문제의 마지막에 버튼간의 거리를 계산해야 하므로,
받은 숫자 배열의 요소들을 모두 좌표값으로 바꾸자는 아이디어로 코드를 짜보았다.
좌표의 x,y값 비교 방법 말고는 버튼 간의 거리를 어떻게 구해야할지 생각이 나지 않았다.

최대한 깔끔하게 작성해본다고 한건데 if문이 뒤죽박죽 섞여있는 느낌도 든다.

제출 통과 후 다른 분들이 작성한 코드를 봤는데 이번 문제는 유독 정규표현식 을 사용한 답안들이 많았다. 정규표현식 공부를 계속 미뤄왔었는데, 정규표현식을 활용하는분들이 많은걸 보면 코드의 가독성, 코드의 효율성 부분에서 장점이 있으니까 그런게 아닐까하는 생각이 들어서 결국 이번 주말을 이용해 공부해보기로 마음을 먹었다.


String.prototype.padStart()

padStart() 메서드는 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환합니다. 채워넣기는 대상 문자열의 시작(좌측)부터 적용됩니다.

오늘 자바스크립트 공부를 하면서 String의 padStart 메서드를 새롭게 알게됐다.
이때까지 문자열을 오른쪽 정렬 후 특정 길이로 유지해주면서 비는 칸을 처리해주기위해 또 다른 함수를 만들곤했었는데 이젠 그럴 필요가 없어졌다!

profile
Yes, I can!

0개의 댓글