티스토리 뷰

2020 카카오 인턴

키패드를 누르는데 규칙에 따라 순차적으로 어떤 손으로 키패드를 누르게 되는지 찾는 문제입니다.

왼쪽 (1, 4, 7)의 경우 왼손의 위치를 변경하고 "L"을 추가합니다.
오른쪽 (3, 6, 9)의 경우 오른손의 위치를 변경하고 "R"을 추가합니다.
가운데 (2, 5, 8, 0)의 경우 왼손과 오른손의 위치에서 거리를 계산합니다.
거리가 같다면 hand 변수에 따라서 왼손 또는 오른손으로 처리해줍니다.
가운데로 이동하였을 경우 해당 손이 가운데 위치하다는 것을 표시하기위해 bool형태의 변수를 사용하였습니다.
가운데일 경우 거리 -1로 계산하게 하였습니다.


function solution(numbers, hand) {
  var answer = "";
  var keypad = [
    ["1", "4", "7", "*"],
    ["2", "5", "8", "0"],
    ["3", "6", "9", "#"],
  ];
  var nowLeft = 3;
  var nowRight = 3;
  var left, right;
  var leftHandCenter = false;
  var rightHandCenter = false;
  var j, k;
  var find;

  for (var i = 0; i < numbers.length; ++i) {
    find = false;
    for (j = 0; j < 3; ++j) {
      for (k = 0; k < 4; ++k) {
        if (numbers[i] === keypad[j][k]) {
          find = true;
          break;
        }
      }
      if (find) {
        break;
      }
    }
    if (j === 0) {
      leftHandCenter = false;
      nowLeft = k;
      answer += "L";
    } else if (j === 2) {
      rightHandCenter = false;
      nowRight = k;
      answer += "R";
    } else {
      left = Math.abs(nowLeft - k);
      right = Math.abs(nowRight - k);
      leftHandCenter ? (left -= 1) : true;
      rightHandCenter ? (right -= 1) : true;
      if (left < right) {
        leftHandCenter = true;
        nowLeft = k;
        answer += "L";
      } else if (left > right) {
        rightHandCenter = true;
        nowRight = k;
        answer += "R";
      } else {
        if (hand === "left") {
          leftHandCenter = true;
          nowLeft = k;
          answer += "L";
        } else {
          rightHandCenter = true;
          nowRight = k;
          answer += "R";
        }
      }
    }
  }
  return answer;
}

 

 

728x90
댓글
댓글쓰기 폼
공지사항