체육복 - 탐욕법(Greedy)
https://programmers.co.kr/learn/courses/30/lessons/42862
function solution(n, lost, reserve){
let uniLost = lost.filter(value => !reserve.includes(value));
// 도난당한 학생 중 여벌이 있는 학생은 자신의 체육복을 입기 때문에 filter메소드로 처리해줌
let uniReserve = reserve.filter(value => !lost.includes(value));
// 마찬가지로 여벌이 있는 학생 중 도난 당한 학생이 있으면 자신의 체육복을 입기 때문에 filter로 처리
let answer = n - uniLost.filter(a => {
let b = uniReserve.find(r => Math.abs(a-r) <= 1);
// 여벌이 있는 학생 중에서 도난 당한 학생과 체격 차이가 1 나는 학생을 찾아서 b에 저장
if (!b) return true;
// b가 없다는 것은 체격이 맞지 않아서 체육복을 빌리지 못한 것이기 때문에 true를 리턴해서 uniLost.filter 배열에 담기도록 해주는 부분
uniReserve = uniReserve.filter(r => r !== b);
// uniReserve 배열을 업데이트 - 체육복을 빌려준 학생은 배열에서 없앤다.
}).length;
// 전체 학생수 - 체육복을 빌리지 못한 학생 수
return answer;
}
주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환한다. 그런 요소가 없다면 undefined를 반환한다.
syntax
arr.find(callback[, thisArg])
var inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
function findCherries(fruit) {
return fruit.name === 'cherries';
} // callback 함수 부분
console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }