코플릿/알고리즘

03_[구현] 보드 게임

테오구 2021. 12. 7. 17:44
728x90

문제

N * N의 크기를 가진 보드판 위에서 게임을 하려고 합니다. 게임의 룰은 다음과 같습니다.

  1. 좌표 왼쪽 상단(0, 0)에 말을 놓는다.
  2. 말은 상, 하, 좌, 우로 이동할 수 있고, 플레이어가 조작할 수 있다.
  3. 조작의 기회는 딱 한 번 주어진다.
  4. 조작할 때 U, D, L, R은 각각 상, 하, 좌, 우를 의미하며 한 줄에 띄어쓰기 없이 써야 한다.
    • 예시: UDDLLRRDRR, RRRRR
  5. 한 번 움직일 때마다 한 칸씩 움직이게 되며, 그 칸 안의 요소인 숫자를 획득할 수 있다.
  6. 방문한 곳을 또 방문해도 숫자를 획득할 수 있다.
  7. 보드 밖을 나간 말은 OUT 처리가 된다.
  8. 칸 안의 숫자는 0 또는 1이다.
    1. 단, 좌표 왼쪽 상단(0, 0)은 항상 0이다.
  9. 획득한 숫자를 합산하여 숫자가 제일 큰 사람이 이기게 된다.

보드판이 담긴 board와 조작하려고 하는 문자열 operation이 주어질 때, 말이 해당 칸을 지나가면서 획득한 숫자의 합을 구하는 함수를 작성하세요.

 

더보기
// LOOK UP TABLE을 사용한다면 조건문을 추상화시킬 수 있습니다.
function boardGame(board, operation) {
  // TODO: 여기에 코드를 작성하세요.
  const DIR = {
    'U': [-10],
    'D': [10],
    'L': [0, -1],
    'R': [01]
  }
  const LEN = board.length;
  const isValid = (y, x) => 0 <= y && y < LEN && 0 <= x && x < LEN;

 

  let Y = 0;
  let X = 0;
  let score = 0;
  for (let i = 0; i < operation.length; i++) {
    const [dY, dX] = DIR[operation[i]];
    Y += dY;
    X += dX;
    if (isValid(YX) === falsereturn 'OUT';
    score += board[Y][X];
  }
  return score;
};
728x90

'코플릿 > 알고리즘' 카테고리의 다른 글

06_[순열] 새로운 치킨 소스 레시피  (0) 2021.12.07
05_rockPaperScissors  (0) 2021.12.07
02_[Greedy] 편의점 알바  (0) 2021.12.07
01_[Greedy] 짐 나르기  (0) 2021.12.07
자바스크립로 구현하는 스택  (0) 2021.10.09