윤성해·2023년 4월 18일
0

알고리즘

목록 보기
20/22

체육복

문제

레퍼런스

1. for문

function solution(n, lost, reserve) {
    const losted = [...lost] // 잃어버린 학생의 번호를 복사하기
    
    // 여벌 체육복을 가지고 있는 학생이 체육복을 도난당한 상태를 체크
    // = 도난 당했다면 lost, reserve ㅂ열에서 해당 학생의 번호를 삭제!
    lost = lost.filter(student => !reserve.includes(student))
                .sort ((a,b)=> a>b ? 1: -1) // 오름차순
    reserve = reserve.filter(student => !losted.includes(student) )
                        .sort((a,b)=> a>b ?1 : -1) // 오름차순
    // 현재 체육복을 잃어버린 학생을 제외한 체육수업을 들을 수 있는 학생의 수 저장!
    let answer = n - lost.length;
    
    for(let i = 0; i < lost.length; i++){
        for(let l = 0; l < reserve.length; l++){
            // 잃어버린 학생의 번호와 여벌 체육복이 있는 학생의 번호를 뺸다.
            // = 두 학생의 번호차이가 얼마나 나는지 구한다.
            const num = Math.abs(lost[i] - reserve[l]);
            // 앞두의 학생만 체크하기.
            if (num === 1){
                // 여벌 체육복을 빌려준 학생을 배열에서 제거 (= null로 대체)
                reserve[l] = null
                answer++;
                
                break;
                
            }
            
  
        }
    }
    return answer
}

2.메서드 reduce

function solution(n, lost, reserve) {
    const losted = [...lost] // 잃어버린 학생의 번호를 복사하기
    
    // 여벌 체육복을 가지고 있는 학생이 체육복을 도난당한 상태를 체크
    // = 도난 당했다면 lost, reserve ㅂ열에서 해당 학생의 번호를 삭제!
    lost = lost.filter(student => !reserve.includes(student))
                .sort ((a,b)=> a>b ? 1: -1) // 오름차순
    reserve = reserve.filter(student => !losted.includes(student) )
                        .sort((a,b)=> a>b ?1 : -1) // 오름차순
   
      return lost.reduce((acc,cur)=> {
          // 잃어버린 학생의 앞 번호를 저장
          const prev = reserve.indexOf(cur - 1)
          // 잃어버린 학생의 뒷 번호를 저장
          const next = reserve.indexOf(cur + 1)
          console.log(cur,reserve, prev, next)
          
          if (prev !== -1){
              // 앞에 있는 할생이 여벌 체육복을 가지고 있는 경우
              reserve.splice(prev,1);
              acc++
          }else if (next !== -1){
              reserve.splice(next,1)
              acc++;
          }
        return acc
      }, n - lost.length)
}
profile
Slow and steady wins the race.

0개의 댓글