가오리의 코딩일기

[67256] 키패드 누르기 본문

HTML+CSS+JavaScript/프로그래머스

[67256] 키패드 누르기

류경혜 2022. 6. 19. 12:00

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

 

코딩테스트 연습 - 키패드 누르기

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

function solution(numbers, hand) {
// 위치 찾는 함수
    function findKey(key) {
    let keypad = [
      [1, 2, 3],
      [4, 5, 6],
      [7, 8, 9],
      ["*", 0, "#"],
    ];
    for (let i = 0; i < 4; i++) {
      for (let j = 0; j < 3; j++) {
        if (keypad[i][j] === key) {
          return [i, j];
        }
      }
    }
  }
  var answer = "";
  let left = "*";
  let right = "#";
  for (let i of numbers) {
    if (i === 1 || i === 4 || i === 7) {
      answer += "L";
      left = i;
    } else if (i === 3 || i === 6 || i === 9) {
      answer += "R";
      right = i - 2;
    } else {
      let r = findKey(right);
      let l = findKey(left);
      let middle = findKey(i);
      // 손과 키패드의 거리
      let rr = Math.abs(r[0] - middle[0]) + Math.abs(r[1] - middle[1]);
      let ll = Math.abs(l[0] - middle[0]) + Math.abs(l[1] - middle[1]);
      if (rr === ll) {
        // 거리가 같다면 오른손잡이 -> 'R', 왼손잡이 -> 'L'
        hand === "right"
          ? ((right = i), (answer += "R"))
          : ((left = i), (answer += "L"));
      } else if (rr > ll) {
        // 오른손의 거리가 멀다면
        answer += "L";
        left = i;
      } else {
        // 왼손의 거리가 멀다면
        answer += "R";
        right = i;
      }
    }
  }
  return answer;
}

- for ... of : 반복가능한 객체에 대해서 반복하고 각 개별 속성값에 대해 실행되는 문이 있는 사용자정의 반복 후크를 호출하는 루프 생성

 

'HTML+CSS+JavaScript > 프로그래머스' 카테고리의 다른 글

[64065] 튜플  (0) 2022.06.19
[42888] 오픈 채팅방  (0) 2022.06.19
[42889] 실패율  (0) 2022.06.19
[17681] (1차) 비밀지도  (0) 2022.06.19
[17682] 다트 게임  (0) 2022.06.17