프로그래머스 고득점 Kit - [체육복] 해설

조승찬·2023년 8월 17일
1
post-thumbnail

고득점 Kit - Greedy(탐욕법)
첫번째 문제 (Lv.1 - 체육복) 해설 코드 공유합니다

이번 문제는 Lv.1 이라 그런지 너무 쉬워서
딱히 다른 설명은 하지 않고 정답 코드만 공유하겠습니다.

주석 자세히 적어두었으니 어려우신 분들은 천천히 읽어보시고 참고하세요~

function solution(n, lost, reserve) {
    let answer = 0;
    lost = lost.sort((a, b) => a - b);    
    reserve = reserve.sort((a, b) => a - b);
    
    for(let i = 1; i <= n; i++) {
        //만약 i가 lost 배열에 없다면(즉, 옷이 있다면)
        if (lost.indexOf(i) < 0) {
            answer++;
        }
        //만약 i가 lost 배열에 있다면(즉, 옷이 없다면)
        else {
            //만약 직전사람이 여분 옷이 있다면 (단, 도난 당한적이 없는 사람이어야함)
            if (reserve.indexOf(i - 1) >= 0 && lost.indexOf(i-1) < 0) {
                answer++;
                //여분 옷 썼으니까 reserve 배열에서 제거
                reserve = reserve.filter((element) => element !== (i-1));
            } 
            //직전 사람은 옷이 없다는데 혹시 다음사람이 여분옷이 있다면? (단, 도난 당한적이 없는 사람이어야함)
            else if (reserve.indexOf(i + 1) >= 0 && lost.indexOf(i+1) < 0) {
                answer++;
                //여분 옷 썼으니까 reserve 배열에서 제거
                reserve = reserve.filter((element) => element !== (i+1));
            }
            //만약 자기가 도난도 당하고 여분 옷도 있다면? (즉, lost와 reserve 배열에 모두 포함)
            else if (reserve.indexOf(i) >= 0) {
                answer++;
                //여분 옷 썼으니까 reserve 배열에서 제거
                reserve = reserve.filter((element) => element !== (i));
            }
            else {
                continue;
            }
        }
    }
    return answer;
}

그럼 다음 해설로 돌아오겠습니다

profile
풀스택 개발자의 우당탕탕 개발일지

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

좋은 정보 감사합니다

답글 달기