[백준/Node.js] 주사위 굴리기 #14499

welchs·2021년 7월 31일
0

백준

목록 보기
3/10
var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split('\n');

const moveDice = (dice, command) => {
  const newDice = [...dice];
  switch (command) {
    case 1:
      newDice[0] = dice[2];
      newDice[1] = dice[3];
      newDice[2] = dice[1];
      newDice[3] = dice[0];
      return newDice;
    case 2:
      newDice[0] = dice[3];
      newDice[1] = dice[2];
      newDice[2] = dice[0];
      newDice[3] = dice[1];
      return newDice;
    case 3:
      newDice[0] = dice[4];
      newDice[1] = dice[5];
      newDice[4] = dice[1];
      newDice[5] = dice[0];
      return newDice;
    case 4:
      newDice[0] = dice[5];
      newDice[1] = dice[4];
      newDice[4] = dice[0];
      newDice[5] = dice[1];
    default:
      return newDice;
  }
};

const solution = (N, M, x, y, board, commands) => {
  // 인덱스의미: 윗면, 아랫면, 왼쪽면, 오른쪽면, 앞면, 뒷면
  let dice = [0, 0, 0, 0, 0, 0];
  // 동쪽: 1, 서쪽: 2, 북쪽: 3, 남쪽: 4
  const DIRECTION = [null, [0, 1], [0, -1], [-1, 0], [1, 0]];

  for (const command of commands) {
    const [dx, dy] = DIRECTION[command];
    const [nextX, nextY] = [x + dx, y + dy];

    // 지도 밖을 나가는 경우 무시
    if (nextX < 0 || nextX >= N || nextY < 0 || nextY >= M) continue;
      
    [x, y] = [nextX, nextY];
    dice = moveDice(dice, command);
    // 문제에서 제시한 조건
    if (board[x][y] === 0) board[x][y] = dice[1];
    else {
      dice[1] = board[x][y];
      board[x][y] = 0;
    }
    console.log(dice[0]);
  }
};

const [N, M, x, y, K] = input[0].split(' ').map((v) => Number(v));
const board = input
  .slice(1, 1 + N)
  .map((v) => v.split(' ').map((v) => Number(v)));
const commands = input[1 + N].split(' ').map((v) => Number(v));
solution(N, M, x, y, board, commands);
profile
고수가 되고 싶은 조빱

0개의 댓글