개발_자 2024. 8. 27. 09:31

function solution(n, lost, reserve) {
    let realLost = lost.filter(l => !reserve.includes(l)).sort((a, b) => a - b);
    let realReserve = reserve.filter(r => !lost.includes(r)).sort((a, b) => a - b);
    let answer = n - realLost.length;
    for(let i = 0; i < realLost.length; i++) {
        let lostNum = realLost[i];
        for(let j = 0; j < realReserve.length; j++) {
            let reserveNum = realReserve[j];
            if(reserveNum === lostNum - 1 || reserveNum === lostNum + 1) {
                answer += 1;
                realReserve[j] = -1;
                break;
            }
        }
    }
    return answer;
}

 

 

    let realLost = lost.filter(l => !reserve.includes(l)).sort((a, b) => a - b);
    let realReserve = reserve.filter(r => !lost.includes(r)).sort((a, b) => a - b);
    let answer = n - realLost.length;

체육복을 잃어버린 학생 중 동시에 여벌옷을 가지고 있는 학생을 제외합니다.

여벌옷을 가지고 있는 학생 중에서도 동시에 체육복을 잃어버린 학생을 제외합니다.

 -> 자신의 여벌옷을 입으므로 빌려줄 수도 없습니다.

 

전체 학생 수 n에서 실제로 체육복을 잃어버린 학생 수(realLost.length)를 빼서, 기본적으로 체육 수업에 참여할 수 있는 학생 수를 계산합니다

 

 

for (let i = 0; i < realLost.length; i++) {
    let lostNum = realLost[i];
    for (let j = 0; j < realReserve.length; j++) {
        let reserveNum = realReserve[j];
        if (reserveNum === lostNum - 1 || reserveNum === lostNum + 1) {
            answer += 1;
            realReserve[j] = -1;  // 이미 사용된 여벌 체육복 표시
            break;
        }
    }
}

realLost 배열을 순회하여 각 잃어버린 학생(lostNum)에 대해,

realReserve 배열을 순회하면서 빌려줄 수 있는 여벌의 체육복을 가진 학생(reserveNum)을 찾습니다.

 

reserveNum === lostNum - 1 || reserveNum === lostNum + 1

여벌의 체육복을 가진 학생이 잃어버린 학생의 바로 앞번호이거나 뒷번호일 때 빌려줄 수 있습니다.

 

 

체육복을 빌려준 경우, answer를 1 증가시키고,

동일한 여벌의 체육복을 다른 학생에게 빌려주지 않도록 

realReserve[j]를 -1로 설정하여 이미 빌려준 것으로 표시합니다.

 

break 문을 사용하여 한 번 빌려주면 다음 잃어버린 학생으로 넘어갑니다.

 

 

 

 

 

break

break 문은 반복문(루프)을 즉시 종료하는 명령어입니다.

반복문이 끝까지 실행되지 않고, 특정 조건이 만족되었을 때 반복문 중간에서 빠져나올 수 있습니다.

 

목적 달성 후 반복문 종료

반복문이 더 이상 실행될 필요가 없을 때 사용됩니다.

 

예를 들어, 체육복을 잃어버린 학생이 여벌의 체육복을 빌리게 되면,

그 학생에게 체육복을 빌려주는 과정을 더 이상 진행할 필요가 없습니다.

이 경우 break를 사용하여 해당 반복문을 종료하고, 다음 잃어버린 학생으로 넘어갑니다.

 

효율성

불필요한 반복을 피할 수 있습니다.

 

break가 없다면,

이미 체육복을 빌려줄 학생을찾은 후에도 계속해서 배열의 남은 부분을 검사하게 됩니다.

이는 불필요한 연산이므로 비효율적입니다.

break를 사용하면 필요한 경우에만 반복을 중단할 수 있어 효율성이 높아집니다.