function solution(n, lost, reserve) {
const students = {}; // students 객체를 생성한다.
let answer = 0; // answer 변수를 생성한다.
for(let i = 1; i <= n; i++){ // 일반 for 문으로 1부터 학생수까지 순회한다.
students[i] = 1; // students 객체에 key를 학생의 번호 value를 1로 넣는다.
}
// 잃어버린 학생들 번호가 담긴 lost 배열을 순회한다.
// lost에 있는 요소를 students객체 key값으로 접근하고 있다면 -1을 한다. (value가 0이됨)
lost.forEach(number => students[number] -= 1);
// 여벌을 보유한 reserve 배열을 순회한다.
// students객체에 해당 되는 번호에 +1을 한다 (2가 된다.)
reserve.forEach(number => students[number] += 1);
// for 문으로 학생수까지 순회한다.
for(let i = 1; i <= n; i++){
// students객체의 value가 여러벌이고 students객체의 앞 번호가 체육복이 없으면
if(students[i] === 2 && students[i-1] === 0){
// 앞 번호에 +1을 더해준다.
students[i-1]++;
// 체육복을 주었으니 자신에게는 -1 해준다.
students[i]--;
// 내가 2개가 있고 뒤에 잃어버렸으면?
} else if(students[i] === 2 && students[i+1] === 0){
// 뒤 사람에게 빌려주고
students[i+1]++;
// 나는 -1
students[i]--;
}
}
// key값대로 students 객체를 돈다.
for(let key in students){
// 1보다 많은 경우
if(students[key] >= 1){
answer에 +1
answer++;
}
}
return answer;
}