문제
프로그래머스 문제
내 풀이
function solution(n, lost, reserve) {
const newLost = lost.filter(num => !reserve.includes(num)).sort((a,b) => a - b);
let newReserve = reserve.filter(num => !lost.includes(num)).sort((a,b) => a - b);
let borrow = 0;
for(var i=0; i<newLost.length; i++){
if(newReserve.includes(newLost[i]-1)){
borrow++;
newReserve = newReserve.filter(num => num !== newLost[i]-1);
} else if(!newReserve.includes(newLost[i]-1) && newReserve.includes(newLost[i]+1)){
borrow++;
newReserve = newReserve.filter(num => num !== newLost[i]+1);
}
}
return n - newLost.length + borrow;
}
개선점
- 아래 풀이는 문제가 좀 바뀌었는지 안 맞는 테스트 케이스가 있다고 하지만 아이디어가 멋져서 갖고왔다.
- 절대값을 이용해서 찾는 부분이 좋다.
function solution(n, lost, reserve) {
return n - lost.filter(a => {
const b = reserve.find(r => Math.abs(r-a) <= 1)
if(!b) return true
reserve = reserve.filter(r => r !== b)
}).length
}