unction solution(n, lost, reserve) {
reserve.sort((a,b)=>a-b)
lost.sort((a,b)=>a-b)
//일단 lost와 reserve 중복되는 사람 삭제해줘야함.
for(const el of lost){
if(reserve.includes(el)){
lost=lost.filter(x=>x!==el)
reserve= reserve.filter(y=>y!==el)
}
}
// 삭제된후 앞 뒤 빌려줄수잇는사람 확인해서,
//있다면 lost의 배열에서 빌려준 삭제해줌
// 빌려줬으면 reserve의 배열에서도 빌려준 사람 삭제함.
reserve.forEach((el)=>{
const front= el-1
const back=el+1
if(lost.includes(front)){
lost = lost.filter(x=>x!==front)
reserve=reserve.filter(y=>y!==front)
}else if(lost.includes(back)){
lost = lost.filter(x=>x!==back)
reserve=reserve.filter(y=>y!==back)
}
})
return n-lost.length
}
절댓값 구하는 Math.abs()로 푼 다른 풀이가있다.
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
}
참고로 .find
메소드는
제공된 배열에서 제공된 테스트 함수를 만족하는 첫 번째 요소를 반환