체육복
function solution(n, lost, reserve) {
let result=[]
const max=(lost.length,reserve.length)
for(let i=0;i<max;i++){
result+=lost.filter((el)=> el=== reserve[i]+1 ||el=== reserve[i]-1)
}
if(lost.length > result.length){
return n+result.length-lost.length
}else{return n-lost.length+reserve.length > n ? n : n-lost.length+reserve.length}
}
function solution(n, lost, reserve) {
const losted=[...lost]//lost가 필터되기 이전의 테이터를 저장한다.
lost =lost.filter(student=>!reserve.includes(student)).sort((a,b)=>a-b)
reserve=reserve.filter(student=> !losted.includes(student)).sort((a,b)=>a-b)
let answer = n-lost.length;
for(let i=0;i<lost.length;i++){
// 내 앞번호의 학생이 여벌체육복을 가지고 있는지를 검사
if(reserve.includes(lost[i]-1)){
reserve.splice(reserve.indexOf(lost[i]-1),1)
answer++
// 내 뒷번호의 학생이 여벌 체육복을 가지고 있는지를 검사
}else if(reserve.includes(lost[i]+1)){
reserve.splice(reserve.indexOf(lost[i]+1),1)
answer++
}
}
return answer
}
solution( 5, [2, 4], [3])
앞뒤 학생만 비교하는게아니라
제한사항이었던 중복데이터 처리와
번호릐 뒤죽박죽일 가능성을 염두해야했돠...
function solution(n, lost, reserve) {
const losted=[...lost]//lost가 필터되기 이전의 테이터를 저장한다.
lost =lost.filter(student=>!reserve.includes(student)).sort((a,b)=>a-b)
reserve=reserve.filter(student=> !losted.includes(student)).sort((a,b)=>a-b)
let answer = n-lost.length;
return lost.reduce((acc,cur)=>{
// 앞에있는 학색이 여벌 에츅복을 가지고 있는지
const prev=reserve.indexOf(cur-1)
// 뒤에있는 학생이 여벌 체육복을 가지고 있는지
const next=reserve.indexOf(cur+1)
// 앞에있는학생이 여벌체육복을 가지고 있는 경우
if(prev!==-1){
reserve.splice(prev,1)
acc++
}else if(next !== -1){
// 뒤에있는학생이 여벌체육복을 가지고 있는 경우
reserve.splice(next,1)
acc++
}
return acc;
},answer)
}