알고리즘 이론 & 풀이/프로그래머스

프로그래머스 Lv.0 | 캐릭터의 좌표

페블_ 2023. 6. 29. 02:24

 

문제 주소 - https://school.programmers.co.kr/learn/courses/30/lessons/120861

 

📝사고의 흐름

  1. 방향키가 들어있는 배열을 돌며 switch case로 무슨 키인지 검사하고, 좌표값을 ++ 혹은 -- 해주자.
    [0, 0]에서 시작하므로 [0, 0] 배열을 선언하고, 이 배열의 값을 증감하자.
  2. 그런데 무한정 이동할 수는 없다. max x값과 max y값을 구한다.
  3. 음수방향으로 가는 경우도 있으므로 max x 혹은 max y에 마이너스를 붙인 값도 잊으면 안된다.
  4. 만약 max x와 max y, 그리고 음수방향을 넘으면 더이상 값이 증가하지 않도록 해야 한다.
  5. switch case에서 방향키를 검사할 때 현재 좌표가 최대값에 다다르지 않았는지 검사하고, 최대값이 아닌 경우에만 좌표를 증감하도록 한다.

💻코드

function solution(keyinput, board) {
  const xy = [0, 0];
  const MAX_X = (board[0] - 1) / 2;
  const MAX_Y = (board[1] - 1) / 2;

  function calculate(arrow, xy) {
    switch (arrow) {
      case 'left':
        if (xy[0] !== -MAX_X) --xy[0];
        break;
      case 'right':
        if (xy[0] !== MAX_X) ++xy[0];
      case 'up':
        if (xy[1] !== MAX_Y) ++xy[1];
        break;
      case 'down':
        if (xy[1] !== -MAX_Y) --xy[1];
    }
  }

  keyinput.forEach((arrow) => calculate(arrow, xy));
  return xy;
}