체육복

Creating the dots·2021년 10월 8일
0

Algorithm

목록 보기
20/65

프로그래머스

https://programmers.co.kr/learn/courses/30/lessons/42862

  • 바로 앞이나 바로 뒤의 학생에게만 체육복을 빌려줄 수 있다
  • 최대한 많은 학생이 체육 수업을 들어야한다
  • 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있다
  • 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있고, 이떄는 하나만 도난당했다고 가정하여 남은 체육복은 하나이므로 다른 학생에게 체육복을 빌려줄 수 없다

나의 풀이

function solution(n, lost, reserve) {
    let students = new Array(n+1).fill(1); //0번째는 dummy, 1부터 n까지 학생
    //도난당한 학생 체육복 0으로 만들기
    for(let i=0;i<lost.length;i++){
        students[lost[i]]=0;
    }
    //여벌의 체육복을 가진 학생 체육복 수 더하기
    for(let i=0;i<reserve.length;i++){
        students[reserve[i]]++;
    }
    for(let i=1;i<students.length;i++){
        if(students[i]===0){
            if(students[i-1]===2){
                students[i-1]--;
                students[i]++;
            }
            else if(students[i+1]===2){
                students[i+1]--;
                students[i]++
            }
        }
    }
    return students.filter((el)=>{
        return el===1 || el===2;
    }).length-1
    //students 배열에 0번째 값은 dummy이므로 1을 빼줘야한다
}
profile
어제보다 나은 오늘을 만드는 중

0개의 댓글