풀이
function solution(board, moves) {
var answer = 0;
let bucket = [];
moves.forEach ((c)=>{
for (var i=0;i<board.length;i++) {
if (board[i][c-1]>0) {
bucket.push(board[i][c-1]);
board[i][c-1]=0
if (bucket.length>1 && bucket[bucket.length-1]===bucket[bucket.length-2]) {
answer+=2
bucket.pop();
bucket.pop();
}
break
}
}
});
return answer;
}
- 2중 for문을 활용하여 2차원 배열을 탐핵하였다. 여기서 기존의 python과 다르게
forEach
를 활용하여 좀 더 method를 활용하는 방식의 코드로 작성하였다.
- 크레인이 제일 상단에 있는 인형을 만나면 뽑는 동시에 0으로 빈칸을 나타내고 해당 인혀이 bucket에 들얼어갔는데 제일 위에 있는 인형이랑 같다면 answer에 2를 더하고 터트려준다.
- 터진 인행은 pop()을 통해 array에서 제거해준다.
아쉬웠던 점
- method를 최대한 활용하여 기존의 2중 for문과 다른 코드를 작성하고 싶었으나 forEach메서드를 사용했다는 점 말고는 기존의 2중 for문과 비슷한 코드를 작성하게 되었다.
+) 다른 사람 코드
findIndex
를 활용하여 해당 문제의 2차원 배열을 탐색할 수 있다.
moves.forEach(n => {
const idx = board.findIndex(r => r[n-1] > 0);
if(idx === -1) {
return;
}
...
findIndex 예제코드
const array1 = [5, 12, 8, 130, 44];
const isLargeNumber = (element) => element > 13;
console.log(array1.findIndex(isLargeNumber));
- 기존의 크레인의 위치를 나타낸 moves를 forEach로 탐색하고 board를 하나씩 탐색하면서 0행부터 하나씩 확인하고 크레인이 위치한 열의 값이 0초과이면 인형이 있다는 사실을 알 수 있다.
- 또한 pop()을 두번 사용하여 bucket에 존재한 인형을 제거 했는데 넣기전에 비교해서 판단을 내리면 한번의 pop()사용으로 문제를 해결할 수 있다.
전체코드
function solution(board, moves) {
var answer = 0;
var temp = [];
moves.forEach(n => {
const idx = board.findIndex(r => r[n-1] > 0);
if(idx === -1) {
return;
}
const target = board[idx][n-1];
const prev = temp.length > 0 ? temp[temp.length-1] : undefined;
if(target === prev){
answer += 2;
temp.pop();
}else {
temp.push(target);
}
board[idx][n-1] = 0;
});
return answer;
}