[etc] 크레인 인형뽑기 게임
문제 설명
문제는 프로그래머스 에서 확인
고민….
- 2차원 배열 기계에서 맨 위의 값들만 가져와서 계산해야함
- 맨 위의 값들을 가져오기 힘드니깐 90도 회전해서 맨 앞의 값들만 빼오면 쉬울듯
내 풀이
var a = [
[0,0,0,0,0],
[0,0,1,0,3],
[0,2,5,0,1],
[4,2,4,4,2],
[3,5,1,3,1]
];
var b = [1,5,3,5,1,2,1,4];
console.log( solution(a,b) )
function solution(board, moves) {
var width = board.length;
//빈 board 생성
let rotate_board = [];
for( var i=0; i< width; i++ ){
rotate_board[i] = new Array( width )
};
//board 왼쪽으로 회전
for( var x=0 ; x <width ; x++)
{
for( var y=0 ; y <width ; y++)
{
rotate_board[x][y] = board[y][width-1-x];
}
};
// 0 제거 및 거꾸로
rotate_board = rotate_board.map(function( arrs ){
return arrs.filter(function(arr){
if( arr > 0 ) return arr;
})
}).reverse();
//----여기까지 옆으로 눕히고 0 제거
var barket = [];
var bom_cnt = 0;
for( var i=0 ; i<moves.length ; i++)
{
var point = moves[i]-1;
// 배열의 길이가 0인거 통과
if( rotate_board[point].length ==0 ) continue;
//인형 뽑아서
var doll = rotate_board[ point ][0];
if( barket[barket.length-1] == doll ){
// 이전의 인형과 같으면 ++
bom_cnt = bom_cnt+2;
barket.pop();
}else{
// 이전의 인형과 다르면 바케스의 저장
barket.push( doll );
}
//인형 뽑기 기계에서 방금 뽑은 맨 앞의 인형 제거
rotate_board[point].shift();
}
return bom_cnt;
}
다른사람 풀이
//옆으로 눕히고 0 제거
const transpose = matrix =>
matrix.reduce(
(result, row) => row.map((_, i) => [...(result[i] || []), row[i]]),
[]
);
const solution = (board, moves) => {
const stacks = transpose(board).map(row =>
row.reverse().filter(el => el !== 0)
);
const basket = [];
let result = 0;
for (const move of moves) {
const pop = stacks[move - 1].pop();
if (!pop) continue;
if (pop === basket[basket.length - 1]) {
basket.pop();
result += 2;
continue;
}
basket.push(pop);
}
return result;
};