풀이
- n+1 만큼의 length를 가진 students 배열을 선언한다. (index 1부터 사용하기 위함)
- students 배열값을 모두 1로 세팅한다. (일단 모두가 체육복을 가지고 있다고 가정)
- reserve를 순회하며 배열값에 해당하는 students index값을 2로 바꾼다.
- lost를 순회하며 배열값에 해당하는 students index값을 -1 해준다.
- students를 순회하며 0이하가 아닐경우 answer++ 해준다.
- 0이하인 index를 만나면 앞뒤 index가 2인지 판단한다.
- 하나라도 2가 있으면 해당 index는 +1 , 다른 index는 -1을 해준다.
- +1을 해줄때 answer++ 해준다.
- return answer
코드
function solution(n, lost, reserve) {
let answer = 0;
const students = new Array(n+1).fill(1);
reserve.forEach(v=>students[v] = 2);
lost.forEach(v=>students[v]--);
for(let i=1;i<students.length;i++){
if(students[i] > 0) {
answer++;
}
else{
if(students[i+1] === 2){
students[i]++;
students[i+1]--;
answer++;
}
else if(students[i-1] === 2){
students[i]++;
students[i-1]--;
answer++;
}
else{
continue;
}
}
}
return answer
}