본문 바로가기
개발/알고리즘

알고리즘 21 : 프로그래머스 체육복

by 안뇽! 2021. 10. 25.
반응형

function solution(n, lost, reserve) {
    //전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 reserve
    
    //정렬 안하면 테스트케이스 12,18이 통과가 안됨
    lost.sort((a,b)=>a-b)
    reserve.sort((a,b)=>a-b)

	//체육복이 여벌이 있었는데 도난당해서 1벌만 남은 경우를 생각해서 교집합을 빼준다.
    let realLost = lost.filter((element) => !reserve.includes(element));
    let realReserve = reserve.filter((element) => !lost.includes(element));
    
    //lost중 체육복을 못빌린 애만 남긴다
    let noUniform = realLost.filter(lost=>{
        //빌려줄 수 있는 애를 찾는다.(가장먼저있는 애)
        let whoCanLend = realReserve.find(reserve=>{
            return (reserve+1===lost||reserve-1===lost)
        })//1
        
        if(!whoCanLend){//빌려줄 수 있는 사람이 없다면
            return lost
        }else{//빌려줬다면, realReserve에서 빌려준사람(1)을 제외한다.
            //빌린사람도 lost명단에서 빼는데 이를 return false로 나타낸다.
            realReserve = realReserve.filter(el=>el!==whoCanLend)
            return false
        }
        
    })
    return n-noUniform.length
}

 

반응형