프로그래머스 - 체육복
part11. 체육복
js ver 1.0
function solution(n, lost, reserve) {
const gymSuit = Array(n).fill(1); // 1로 초기화
// 해당 index(순번 -1)에 체육복 개수 조정
lost.forEach(el => gymSuit[el-1]--);
reserve.forEach(el => gymSuit[el-1]++);
//앞사람 체육복부터 훔치기
for(let i = 0; i < n; i++){
if(gymSuit[i] == 0 && gymSuit[i-1] == 2){
gymSuit[i-1] = 1;
gymSuit[i] = 1;
}else if(gymSuit[i] == 0 && gymSuit[i+1] == 2){
gymSuit[i+1] = 1;
gymSuit[i] = 1;
}
}
return gymSuit.reduce((acc, el) => acc + (el >= 1 ? 1 : el), 0);
}
js ver 1.1
function solution(n, lost, reserve) {
let temp = reserve;
//sort해서 앞에서부터 훔치기
lost.sort().forEach(el => {
if(reserve.includes(el)){ //체육복 부자
temp = temp.filter(item => el != item); //filter로 제외시키기
}else if(!reserve.includes(el) && temp.includes(el-1)){ // 뒷사람 체육복 훔치기
temp = temp.filter(item => el != item +1);
}else if(!reserve.includes(el) && temp.includes(el+1)){ // 앞사람 체육복 훔치기
temp = temp.filter(item => el != item -1);
}
});
return n - lost.length + reserve.length - temp.length; // n - 안가져온 사람 + (실제로 줄 수 있는 사람)
}