
1. for문
function solution(n, lost, reserve) {
const losted = [...lost] // 잃어버린 학생의 번호를 복사하기
// 여벌 체육복을 가지고 있는 학생이 체육복을 도난당한 상태를 체크
// = 도난 당했다면 lost, reserve ㅂ열에서 해당 학생의 번호를 삭제!
lost = lost.filter(student => !reserve.includes(student))
.sort ((a,b)=> a>b ? 1: -1) // 오름차순
reserve = reserve.filter(student => !losted.includes(student) )
.sort((a,b)=> a>b ?1 : -1) // 오름차순
// 현재 체육복을 잃어버린 학생을 제외한 체육수업을 들을 수 있는 학생의 수 저장!
let answer = n - lost.length;
for(let i = 0; i < lost.length; i++){
for(let l = 0; l < reserve.length; l++){
// 잃어버린 학생의 번호와 여벌 체육복이 있는 학생의 번호를 뺸다.
// = 두 학생의 번호차이가 얼마나 나는지 구한다.
const num = Math.abs(lost[i] - reserve[l]);
// 앞두의 학생만 체크하기.
if (num === 1){
// 여벌 체육복을 빌려준 학생을 배열에서 제거 (= null로 대체)
reserve[l] = null
answer++;
break;
}
}
}
return answer
}
2.메서드 reduce
function solution(n, lost, reserve) {
const losted = [...lost] // 잃어버린 학생의 번호를 복사하기
// 여벌 체육복을 가지고 있는 학생이 체육복을 도난당한 상태를 체크
// = 도난 당했다면 lost, reserve ㅂ열에서 해당 학생의 번호를 삭제!
lost = lost.filter(student => !reserve.includes(student))
.sort ((a,b)=> a>b ? 1: -1) // 오름차순
reserve = reserve.filter(student => !losted.includes(student) )
.sort((a,b)=> a>b ?1 : -1) // 오름차순
return lost.reduce((acc,cur)=> {
// 잃어버린 학생의 앞 번호를 저장
const prev = reserve.indexOf(cur - 1)
// 잃어버린 학생의 뒷 번호를 저장
const next = reserve.indexOf(cur + 1)
console.log(cur,reserve, prev, next)
if (prev !== -1){
// 앞에 있는 할생이 여벌 체육복을 가지고 있는 경우
reserve.splice(prev,1);
acc++
}else if (next !== -1){
reserve.splice(next,1)
acc++;
}
return acc
}, n - lost.length)
}