문제 🔽
https://school.programmers.co.kr/learn/courses/30/lessons/64061
다른사람 풀이 🔽
function solution(board, moves) {
var count =0;
var stack = [];
for(var i=0;i<moves.length;i++){
var now = moves[i]-1
for(var j=0;j<board.length;j++){
if(board[j][now]!=0){
if(stack[stack.length-1]===board[j][now]){
stack.pop();
count+=2;
}
else{
stack.push(board[j][now])
}
board[j][now] = 0;
break;
}
}
}
console.log(stack)
return count
}
내풀이🔽
1. 성공 ⭕
function solution(board, moves) {
var answer = 0;
let stack=[]
let n = board.length
// 2차원 배열 깊은복사
let newBoard = board.map((val)=>{return [...val]})
for(let i=0; i<n; i++){
for(let j=0; j<n; j++){
newBoard[i][j]=board[(n-1)-j][i]
}
}
// 0을 모두 없앰
newBoard.forEach((arr,index)=>{
newBoard[index]=arr.filter((ele)=>{return ele!==0})
})
// stack에 인형들을 순서대로 쌓아넣음
moves.forEach((val)=>{
let poppedDoll=newBoard[val-1].pop();
if(poppedDoll){
stack.push(poppedDoll);
if(stack[stack.length-2]===stack[stack.length-1]){
stack.pop()
stack.pop()
answer+=2;
}
}
})
return answer;
}
느낀점🔽
문제를 잘못 읽어서 혼란스러운 시간을 많이 보냈다.
그 이후에 2차원배열의 깊은 복사에서 실수를 해서 또 왜 안되는지 시간을 허비했다..
우여곡절 끝에 결국 문제를 풀었다.
다른사람의 풀이를 보니 굳이 배열의 가로세로를 안바꾸고 풀어서 신기했다.
다시한번 복기하자면 배열이 1차원일때는
let newArr = oldArr.slice() >> slice()를 이용하여 1차원 깊은 복사
2차원 일때 깊은복사는
let newArr = oldArr.map((val)=>{ return [...val] }) 또는
let newArr = oldArr.map((val)=>{ return val.slice() } 를 이용하면 된다.
'Javascript' 카테고리의 다른 글
프로그래머스 코딩테스트 풀이(js) > 숫자 짝꿍(lv1) (0) | 2023.07.22 |
---|---|
프로그래머스 코딩테스트 풀이(js) > 행렬의 덧셈(lv1) (0) | 2023.07.21 |
프로그래머스 코딩테스트 풀이(js) > 모의고사(lv1) (0) | 2023.07.19 |
프로그래머스 코딩테스트 풀이(js) > 카드뭉치(lv1) (0) | 2023.07.18 |
프로그래머스 코딩테스트 풀이(js) > 문자열 나누기(lv1) (0) | 2023.07.17 |