티스토리 뷰

알고리즘/프로그래머스 문제풀이

프로그래머스 NodeJS Level 2 : 멀쩡한 사각형

YG - 96년생 , 강아지 있음, 개발자 희망 2022. 3. 3. 20:39
/* get input */
let numbers = [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2];
let hand = "left";
/* get input end */

/* solve */
function solution(numbers, hand) {
  var answer = "";
  let left = { x: 1, y: 1 };
  let right = { x: 3, y: 1 };
  let numberArr = [];
  let numberAnswerArr = [];
  let userHand = hand[0].toUpperCase();
  for (let i = 1; i < 4; i++) {
    for (let j = 1; j < 5; j++) {
      numberArr.push({ x: i, y: j });
    }
  }

  for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] === 1) {
      numberAnswerArr.push(numberArr[3]);
    } else if (numbers[i] === 2) {
      numberAnswerArr.push(numberArr[7]);
    } else if (numbers[i] === 3) {
      numberAnswerArr.push(numberArr[11]);
    } else if (numbers[i] === 4) {
      numberAnswerArr.push(numberArr[2]);
    } else if (numbers[i] === 5) {
      numberAnswerArr.push(numberArr[6]);
    } else if (numbers[i] === 6) {
      numberAnswerArr.push(numberArr[10]);
    } else if (numbers[i] === 7) {
      numberAnswerArr.push(numberArr[1]);
    } else if (numbers[i] === 8) {
      numberAnswerArr.push(numberArr[5]);
    } else if (numbers[i] === 9) {
      numberAnswerArr.push(numberArr[9]);
    } else if (numbers[i] === 0) {
      numberAnswerArr.push(numberArr[4]);
    }
  }

  for (let i = 0; i < numberAnswerArr.length; i++) {
    if (numberAnswerArr[i].x === 1) {
      answer += "L";
      left = { x: 1, y: numberAnswerArr[i].y };
    } else if (numberAnswerArr[i].x === 3) {
      answer += "R";
      right = { x: 3, y: numberAnswerArr[i].y };
    } else {
      let leftSum =
        Math.abs(numberAnswerArr[i].x - left.x) +
        Math.abs(numberAnswerArr[i].y - left.y);
      let rightSum =
        Math.abs(numberAnswerArr[i].x - right.x) +
        Math.abs(numberAnswerArr[i].y - right.y);
      if (leftSum < rightSum) {
        answer += "L";
        left = { x: 2, y: numberAnswerArr[i].y };
      } else if (leftSum > rightSum) {
        answer += "R";
        right = { x: 2, y: numberAnswerArr[i].y };
      } else if (leftSum === rightSum) {
        answer += userHand;
        if (userHand === "L") {
          left = { x: 2, y: numberAnswerArr[i].y };
        } else if (userHand === "R") {
          right = { x: 2, y: numberAnswerArr[i].y };
        }
      }
    }
  }

  return answer;
}
/* solve end */

/* print output */
console.log(solution(numbers, hand));
/* print output end */

키패드 0~9까지의 번호를 좌표 x, y로 변환하였습니다.

 

그 이후 x값이 1이면 L, x 값이 3이면 R을 하였고 x가 2일 때의 경우만 남았는데 목표의 x, y 값과 left , right의 차이의 합을 비교하여 문제를 풀었습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함