알고리즘

[JS] 프로그래머스 1단계 - 체육복(greedy)

햄❤️ 2021. 6. 9. 22:39
반응형

링크

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

 

 

코드

function solution(n, lost, reserve) {
    var answer = 0;
    let total = [];
    //전체 학생을 1로 세팅
    for (let i=0; i<n; i++){
        total.push(1);
    }
    //total = [1,1,1,1,1] 모두 1개씩 있음
    
    //여벌옷이 있는 친구들 +1씩 하기
    for (let i=0; i<reserve.length; i++){
        total[reserve[i]-1]++;
    }
    //total = [2,1,2,1,2]
    //도둑질 당한 친구들 -1씩 하기
    for(let i=0; i<lost.length; i++){
        total[lost[i]-1]--;
    }
    //total = [2,0,2,0,2]
    //0인 숫자들이, 앞 뒤로 2이상인지 확인하기
    for(let i=0; i<n; i++){
        if(total[i] === 0){
            //앞에 숫자가 2 이상이면
            if(i>0 && total[i-1]>=2){
                total[i]=1;
                total[i-1]-=1;
            //뒤에 숫자가 2 이상이면
            }else if(i<n && total[i+1]>=2){
                total[i]=1;
                total[i+1]-=1;
            }
        }
    }
    //이제 1 이상인 친구들만 answer의 값을 올려준다
    for(let i=0; i<n; i++){
        if(total[i]>=1){
            answer++
        }
    }
    return answer;
}
728x90
반응형