duck blog
Published on

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

Authors
  • avatar
    Name
    Deokgoo Kim
    Twitter

문제 풀이

시뮬레이션 문제입니다 난이도는 개인적으로 중이라고 생각합니다.
빠르게 발견한다면 쉽게 해결 할 것이고 해매면 시간이 많이 걸릴 것입니다.


문제 링크

function solution(numbers, hand) {
    let answer = '';
    const absolutLeft = [1, 4, 7];
    const absoluteRight = [3, 6, 9];
    const middle = [2, 5, 8, 11];

    let leftHand = 10;
    let rightHand = 12;

    const judge = (num) => {
      let tmp = num===0?11:num;
      if(absolutLeft.includes(tmp)) {
        leftHand = tmp;
        answer+='L';
        return;
      }
      if(absoluteRight.includes(tmp)) {
        rightHand = tmp;
        answer+='R';
        return;
      }
      let leftPos, rightPos;
      if(middle.includes(leftHand)) {
        leftPos = Math.abs(leftHand - tmp)/3;
      } else {
        leftPos = Math.abs(tmp-(leftHand+1))/3 + 1;
      }

      if(middle.includes(rightHand)) {
        rightPos = Math.abs(rightHand - tmp)/3;
      } else {
        rightPos = Math.abs(tmp-(rightHand-1))/3 + 1;
      }
      if(leftPos === rightPos) {
        if(hand==='right') {
          rightHand = tmp;
          answer+='R';
        } else {
          leftHand = tmp;
          answer+='L';
        }
      } else {
        if(leftPos>rightPos) {
          rightHand = tmp;
          answer+='R';
        } else {
          leftHand = tmp;
          answer+='L';
        }
      }
    }

    numbers.forEach(x => {
      judge(x);
    })
    return answer;
}