👍 썸네일 출처

boardGame


문제 🙋


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

  • 좌표 왼쪽 상단(0, 0)에 말을 놓는다.
  • 말은 상, 하, 좌, 우로 이동할 수 있고, 플레이어가 조작할 수 있다.
  • 조작의 기회는 딱 한 번 주어진다.
  • 조작할 때 U, D, L, R은 각각 상, 하, 좌, 우를 의미하며 한 줄에 띄어쓰기 없이 써야 한다.
    ( 예시: UDDLLRRDRR, RRRRR )
  • 한 번 움직일 때마다 한 칸씩 움직이게 되며, 그 칸 안에 적힌 숫자를 획득할 수 있다.
  • 방문한 곳을 다시 방문해도 숫자를 획득할 수 있다.
  • 해당 방향으로 말이 보드 밖으로 나가게 될 경우 해당 순서는 무시하고 계속 진행한다.
  • 칸 안의 숫자는 0 또는 1이다.
    ( 단, 좌표 왼쪽 상단(0, 0)은 항상 0이다. )
  • 획득한 숫자를 합산하여 숫자가 제일 큰 사람이 이기게 된다.
  • 보드판이 담긴 board와 조작하려고 하는 문자열 operation이 주어질 때, 말이 해당 칸을 지나가면서
    획득한 숫자의 합을 구하는 함수를 작성하세요.

입력 🔜


인자 1 : board

  • Number 타입의 2차원 배열
  • 2 <= board.length <= 100
  • 예: [ [0, 0, 1], [1, 0, 1], [1, 1, 1] ]

인자 2 : operation

  • string 타입의 대문자 영어가 쓰여진 문자열
  • 1 <= operation.length <= board.length * 2
  • U, L, D, R 이외의 문자열은 없습니다.

출력 🔚


  • Number 타입을 반환해야 합니다.

주의사항 ⚠️


  • 만약 해당 방향으로 말이 보드 밖으로 나가게 될 경우 해당 순서는 무시하고 계속 진행합니다.

입출력 예시 ⌨️


const board1 = [
  [0, 0, 0, 1],
  [1, 1, 1, 0],
  [1, 1, 0, 0],
  [0, 0, 0, 0]
]
const output1 = boardGame(board1, 'RRDLLD');
console.log(output1); // 4

Pseudo Code ✍️


// x축 y축을 만들고(시작지점은 0,0)
// 방향 문자열의 개수를 기준으로 for문 진행
// if문으로 방향에 맞게 x,y값 변경
// 만약 해당 방향으로 x혹은 y가 -1로 배열 길이보다 커진다면 해당 방향은 무시
// x,y가 증감한 다음 board 배열에 해당 위치 value를 찾고 총합에 더한다.

Code 💻


function boardGame(board, operation) {

  let Y = 0; 
  let X = 0;
  let result = 0;
  let current = board[0][0];

  for (let direction of operation) {
    if (direction === 'U') Y += - 1; X += 0;

    if (direction === 'D') Y += 1; X += 0;

    if (direction === 'L') Y += 0; X += - 1;

    if (direction === 'R') Y += 0; X += 1;

    if (Y < 0 || Y > board.length || X < 0 || X > board.length) {
      continue;
    }
    current = board[Y][X];
    
    result = result + current;
  }

  return result;
};

키워드 🔑

0개의 댓글

Powered by GraphCDN, the GraphQL CDN