N x M으로 이루어진 아래와 같은 공간에 퍼즐이 쌓여져 있습니다.
퍼즐을 맞추기 위해서는 반드시 맨 오른쪽 줄로 이동시켜 줘야 합니다.
만약 종류가 같은 퍼즐이 연속될 시에 점수가 추가되며 그 퍼즐은 사라집니다.
점수는 다음과 같습니다.
- 파란색 공 : 1점
- 빨간색 공 : 2점
- 노란색 공 : 3점
- 초록색 공 : 4점
- 주황색 공 : 5점
점수는 공의 개수만큼 추가됩니다.
예를 들어 빨간색 공이 2개 연속되어 없어졌을 경우 2*2 = 4점입니다.
게임 플레이어는 게임이 시작되면 어떤 퍼즐을 이동할 것인지 모두 작성합니다.
만약 비어있는 곳을 선택하게 된다면 점수가 1점 감소하며 그대로 진행합니다.
위 규칙에 맞는 점수를 리턴하는 함수를 작성하세요.
/**
* 퍼즐의 점수를 나타낸 2차원 배열을 인자로 받아,
* 오른쪽으로 90도를 돌린 배열을 반환하는 함수
*
* @param {number[][]} board 퍼즐의 점수를 나타낸 2차원 배열
* @returns {number[][]} 오른쪽으로 90도 돌린 배열
*/
function getRotateBoard(board) {
let rotateBoard = [];
let tmp = [];
for (let col = 0; col < board[0].length; col += 1) {
tmp = [];
for (let row = 0; row < board.length; row += 1) {
tmp.push(board[row][col]);
}
tmp = tmp.filter((el) => el !== 0).reverse();
rotateBoard.push(tmp);
}
return rotateBoard;
}
/**
* 오른쪽으로 90도 돌린 보드와 조작할 위치가 담긴 리스트를 인자로 받아,
* 규칙에 따라 점수를 반환하는 함수
*
* @param {number[][]} rotateBoard 오른쪽으로 90도 돌린 보드
* @param {number[]} MOVE_LIST 조작할 위치가 담긴 리스트
* @returns {number} 점수
*/
function getScore(rotateBoard, MOVE_LIST) {
let stack = [];
let score = 0;
for (const MOVE of MOVE_LIST) {
const SELECT_ROW = MOVE - 1;
// 비어있는 곳 선택시 점수 1점 감소
if (rotateBoard[SELECT_ROW].length === 0) {
score -= 1;
continue;
}
const SELECT_PUZZLE = rotateBoard[SELECT_ROW].pop();
// 스택이 비어있으면 선택한 퍼즐 바로 push
if (stack.length === 0) stack.push(SELECT_PUZZLE);
else {
// 스택이 비어있지 않으면
// 스택의 top과 같은 것을 선택했을 시 스택에서도 pop해주고 점수 * 2를 더해줌
if (stack.at(-1) === SELECT_PUZZLE) score += stack.pop() * 2;
// top과 같지 않으면 그냥 push
else stack.push(SELECT_PUZZLE);
}
}
return score;
}
function solution() {
let board = [
[0, 0, 0, 0],
[0, 1, 0, 3],
[2, 5, 0, 1],
[2, 4, 4, 1],
[5, 1, 1, 1],
];
const MOVE_LIST = [1, 1, 1, 1, 3, 3, 3];
let rotateBoard = getRotateBoard(board);
const SCORE = getScore(rotateBoard, MOVE_LIST);
console.log(SCORE);
}
solution();
'PS > 제코베 JS 100제' 카테고리의 다른 글
제코베 JS 100제 / 99 / 토끼들의 행진 (0) | 2022.10.14 |
---|---|
제코베 JS 100제 / 98 / 청길이의 패션 대회 (0) | 2022.10.14 |
제코베 JS 100제 / 97 / 택배 배달 (0) | 2022.10.14 |
제코베 JS 100제 / 96 / 넓은 텃밭 만들기! (0) | 2022.10.10 |