function solution(n, lost, reserve) {
const stu = new Array(n+1).fill(1);
for (let i=0; i<reserve.length; i++) {
stu[reserve[i]]++;
}
for (let i=0; i<lost.length; i++) {
stu[lost[i]]--;
}
let answer=0;
for (let i=1; i<stu.length; i++) {
if (stu[i]===0) {
if (stu[i-1] >= 2) {
stu[i]++;
stu[i-1]--;
answer++;
}
else if (stu[i+1] >= 2) {
stu[i]++;
stu[i+1]--;
answer++;
}
}
else {
answer++;
}
}
return answer;
}
console.log(solution(5, [2, 4], [1, 3, 5]));
Array.prototype.find() ⇒ 주어진 판별 함수를 만족하는 첫번째 요소 반환
Math.abs() ⇒ 절대값
return true 라는게 그 우리가 완전 탐색에서 return; 하듯이 만족 안 하면 넘긴다는 의미인듯. 즉, 뺀 값이 1인 애들만 고려할 건데, 그게 아니면 그냥 넘긴다. (return true)
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
}
Array.prototype.findIndex() ⇒ 주어진 판별 함수를 만족하는 첫번째 요소의 인덱스 반환. 체육복 풀이
function lostFilter(lost, reserve, findT) {
const filterT = { me: true, friend: false };
return lost.filter(lostN => {
const existI = reserve.findIndex(reserveN => filterT[findT]
? reserveN === lostN
: Math.abs(reserveN - lostN) <= 1);
if(existI === -1) return true;
reserve.splice(existI, 1);
});
}
function solution(n, lost, reserve) {
const selfLost = lostFilter(lost, reserve, 'me' );
const realLost = lostFilter(selfLost, reserve, 'friend');
return n - realLost.length;
}
function solution(n, lost, reserve) {
const students = {};
let answer = 0;
for(let i = 1; i <= n; i++){
students[i] = 1;
}
lost.forEach(number => students[number] -= 1);
reserve.forEach(number => students[number] += 1);
for(let i = 1; i <= n; i++){
if(students[i] === 2 && students[i-1] === 0){
students[i-1]++;
students[i]--;
} else if(students[i] === 2 && students[i+1] === 0){
students[i+1]++;
students[i]--;
}
}
for(let key in students){
if(students[key] >= 1){
answer++;
}
}
return answer;
}