map을 이용해서 풀었다.
const map = new Map();
for(let i=0;i<board.length;i++){
for(let j=0;j<board.length;j++){
if(board[i][j]!==0){
map.set(j+1,[...(map.get(j+1)||''),board[i][j]])
}
}
}
for(let i=0;i<moves.length;i++){
if(map.get(moves[i]).length>0){
dolls.push(map.get(moves[i]).shift())
}
}
moves 배열로 map의 원소(인형)를 뽑아서 dolls라는 배열에저장함.
let count=0;
for(let i=0;i<dolls.length;i++){
if(dolls[i]==dolls[i+1]){
count++
dolls.splice(i,2)
if(i==0){
i=i-1
}else{
i=i-2
}
}
}
dolls라는 배열을 순회하며 겹치는게 있는지 확인해주고 , count를 늘려주줌. 그리고 겹치는건 삭제함.
i의값을 -2로 해줘서 삭제한 후 새롭게 겹칠가능성있는걸 검사해줌
케이스 2 가 계속 실패로떴는데, 이는 i=0일때 i=i-1을 해줘야했기때문.
function solution(board, moves) {
var answer = 0;
let dolls=[]
const map = new Map();
for(let i=0;i<board.length;i++){
for(let j=0;j<board.length;j++){
if(board[i][j]!==0){
map.set(j+1,[...(map.get(j+1)||''),board[i][j]])
}//board[i][j] 가 0이 아니면
}
}
for(let i=0;i<moves.length;i++){
if(map.get(moves[i]).length>0){
dolls.push(map.get(moves[i]).shift())
}
}
let count=0;
for(let i=0;i<dolls.length;i++){
if(dolls[i]==dolls[i+1]){
count++
dolls.splice(i,2)
if(i==0){
i=i-1
}else{
i=i-2
}
}
}
return count*2
}
function solution(board, moves) {
const basket = [];
let result = 0;
moves.forEach(order => {
const doll = pickup(board, order-1);
if(doll){
if(basket[basket.length-1] === doll){
basket.pop();
result +=2;
}else{
basket.push(doll);
}
}
});
return result;
}
function pickup(board, order){
for(let i = 0; i < board.length ; i++){
if(board[i][order] !== 0){
const doll = board[i][order];
board[i][order]= 0;
return doll;
}
}
}