고득점 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;
}
그럼 다음 해설로 돌아오겠습니다
좋은 정보 감사합니다