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

picture 22

[카카오 인턴] 키패드 누르기

풀이

각 버튼이 주어졌을 때 누르는 손가락 구하기

  • 마지막으로 누른 버튼 기억하기
  • 147은 왼손, 369는 오른손
  • 숫자를 3으로 나누면 해당 숫자가 어떤 열에 있는지 확인 가능하다
  • 0은 해당하지 않지만 0이 원래 있어야 하는 위치의 숫자(11)로 바꿔주면 동작한다.
  • *,# 또한 해당 위치의 숫자로 변경해주자
  • 2580은 나오면 더 가까운 손

    • 버튼과 손가락간의 거리 비교하기
let left

if ((1, 4, 7)) {
  return} else if (369) {
  return} else {
  // 어느 손으로 할지 구하기
}
  • 버튼간의 거리는 어떻게 측정할까?
  • 각 버튼 숫자의 차를 3으로 나눈 나머지와 몫을 더하면 거리가 나온다

    • 다만 0의 경우는 -1로 치환하자

최종 소스코드

function solution(numbers, hand) {
  let left = 10
  let right = 12

  const getDist = (a, b) => {
    const n = Math.abs(a - b)
    return parseInt(n / 3) + (n % 3)
  }

  const isLeft = n => {
    switch (n % 3) {
      case 0:
        return false
      case 1:
        return true
      case 2:
        const dists = [getDist(left, n), getDist(right, n)]
        if (dists[0] === dists[1]) {
          return hand === 'left' ? true : false
        } else {
          return dists[0] < dists[1] ? true : false
        }
    }
  }

  return numbers
    .map(n => (n === 0 ? 11 : n))
    .map(n => {
      if (isLeft(n)) {
        left = n
        return 'L'
      } else {
        right = n
        return 'R'
      }
    })
    .join('')
}

Written by@박대성

독서와 지식관리에 관심이 많은 개발자

GitHub