프로그래머스 Level 1 - 체육복

크롱·2023년 11월 23일
0

코딩테스트

목록 보기
51/61

나의 풀이

unction solution(n, lost, reserve) {
   reserve.sort((a,b)=>a-b)
    lost.sort((a,b)=>a-b)

  //일단 lost와 reserve 중복되는 사람 삭제해줘야함.
    for(const el of lost){
        if(reserve.includes(el)){
            lost=lost.filter(x=>x!==el)
            reserve= reserve.filter(y=>y!==el)
        }
    }

// 삭제된후 앞 뒤 빌려줄수잇는사람 확인해서, 
  //있다면 lost의 배열에서 빌려준 삭제해줌
  // 빌려줬으면 reserve의 배열에서도 빌려준 사람 삭제함.
    reserve.forEach((el)=>{
        const front= el-1
        const back=el+1

      if(lost.includes(front)){
        lost = lost.filter(x=>x!==front)
            reserve=reserve.filter(y=>y!==front)
       }else if(lost.includes(back)){
           lost = lost.filter(x=>x!==back)
            reserve=reserve.filter(y=>y!==back)
       }


    })

    return n-lost.length
}

다른 풀이 Math.abs()

절댓값 구하는 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
}

참고로 .find메소드는
제공된 배열에서 제공된 테스트 함수를 만족하는 첫 번째 요소를 반환

profile
👩‍💻안녕하세요🌞

0개의 댓글