JavaScripts 문제

문제 64. 체육복 (난이도 5)

kagan-draca 2024. 8. 28. 21:19

 

여러 코드를 작성하고 테스트를 진행했지만,

부분적인 성공만 있고 전체 테스트를 통과하지 못 했다.

 

그래서 프로그래머스의 "질문하기"란을 통해

테스트 케이스를 확인해봤다.

 

그 결과 체육복이 도둑질 당했지만,

여벌이 존재하는 학생이 존재할 수 있다는

사실을 알게 됐다.

 

그리고 해당 학생은 본인의 앞, 뒤 학생에게

여벌 옷이 있는지 확인을 하기 전

본인의 여벌 옷을 사용하는 식으로 코드를 작성해야 했다.

 

그래서, 먼저

let realLost = lost.filter((element)=> !reserve.includes(element)).sort((a,b)=> a- b)

도난 당한 학생일 때 filter 함수로 여벌 유무를 판단해

여벌이 없는 상황에서 도난 당한 학생 배열을 정렬한 형태로 저장했다.

 

let realReserve = reserve.filter((element)=> !lost.includes(element)).sort((a,b)=> a- b)

마찬가지로 여벌이 있지만 도난 당한 학생일 경우

여벌이 없다고 만들기 위해 위의 코드를 약간 수정해 사용했다.

 

 let result = n - realLost.length

전체 학생 수 n에서 realLost.length빼면

수업에 참여 가능한 현재 인원을 변수에 담을 수 있다.

 

for(let value of realLost)
{

}

여벌이 없는 도난 당한 학생을 반복문을 통해 반복하면서

const front = realReserve.some((element)=> element === value - 1)
if(front)
{
     result++;
     realReserve.splice(realReserve.indexOf(value - 1),1);
     continue;

}

const back = realReserve.some((element)=> element === value + 1)
if(back)
{

     result++;
     realReserve.splice(realReserve.indexOf(value + 1),1);
}

으로 압, 뒤 학생의 옷이 있으면 옷을 입고

realReserve에서 빌려준 친구를 지워

옷을 빌렸다는 사실을 알려줍니다.

그리고 result를 증가시켜 줍니다.

 

return result

 

제출한 코드 : 

 

function solution(n, lost, reserve) 
{
    let realLost = lost.filter((element)=> !reserve.includes(element)).sort((a,b)=> a- b)
    let realReserve = reserve.filter((element)=> !lost.includes(element)).sort((a,b)=> a- b)
    
    let result = n - realLost.length
    for(let value of realLost)
    {
       const front = realReserve.some((element)=> element === value - 1)
       if(front)
       {
           result++;
           realReserve.splice(realReserve.indexOf(value - 1),1);
           continue;
       }
       const back = realReserve.some((element)=> element === value + 1)
       if(back)
       {
           result++;
           realReserve.splice(realReserve.indexOf(value + 1),1);
       }
    }
    return result
}