- 문제
- 한 반에 체육복 도둑이 들어와 체육복을 훔쳐감
- 체육복이 없으면 체육 수업에 참여할 수 없음
- 학급 번호는 체형 크기순으로 메겨져 있음
- 여벌의 체육복이 있는 학생은 자신의 바로 앞 또는 뒷번호에게만 빌려줄 수 있음
- 여벌은 최대 1벌을 가질 수 있고, 여벌이 있는 학생 또한 도둑 맞았을 수 있음
- 체육 수업에 참여할 수 있는 학생의 수를 구하여 리턴하자
- 수도코드
- 결과
function solution(n, lost, reserve) {
lost.sort();
reserve.sort();
for (let i = 0; i < reserve.length; i++) {
if (lost.includes(reserve[i])) {
let idx = lost.indexOf(reserve[i]);
lost.splice(idx,1);
reserve.splice(i, 1);
i--;
}
}
let answer = n - lost.length;
let sol = [];
for (let i = 0; i < reserve.length; i++) {
for (let j = 0; j < lost.length; j++) {
if (lost[j] === reserve[i] - 1) {
sol.push(lost[j]);
lost.splice(j,1);
reserve.splice(i,1);
j--;
i--;
} else if (lost[j] === reserve[i] + 1) {
sol.push(lost[j]);
lost.splice(j,1);
reserve.splice(i,1);
j--;
i--;
}
}
}
answer = answer + sol.length;
return answer;
}
- 레퍼런스
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
}
- 레퍼런스를 완벽히 이해하도록 공부해야겠음
- 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
}