프로그래머스 LEVEL 1. 체육복 (JavaScript)

Bendeso·2023년 8월 23일
0

알고리즘

목록 보기
16/19
post-thumbnail

❗ 문제 설명

❗ 입출력 예

❗ 주의사항

  • 여벌 체육복을 가져온 학생도 체육복을 도난당했을 수 있다.
  • 체육복을 도난 당했지만 체육복이 두 벌인 친구가 있다면 결국 한 벌이 있는 것이기 때문에 lost배열과 reserve배열에서 빼줘야합니다.
  • lost배열과 reserve배열을 정렬해줘야 통과할 수 있는 테스트케이스가 존재합니다. 예를 들어, lost [4, 2] reserve [3, 5] 이라고 할 때, 정렬이 되어있다면 2가 3한테 4가 5한테 체육복을 빌리면 모두 체육복을 빌릴 수 있지만 정렬이 안돼있다면 4가 3한테 체육복을 빌려서 2는 체육복을 못 빌리기 때문에 최댓값을 구할 수 없습니다.

✍ 문제풀이

function solution(n, lost, reserve) {
    let answer = [];
    
    // 정렬
    lost.sort((a, b) => a - b);
    reserve.sort((a, b) => a - b)
    
    // 체육복을 도난당하지 않은 학생 구하기
    for (let i = 1; i <= n; i++) {
        if (!lost.includes(i)) answer.push(i);
    }
    
    // 체육복을 도난당했지만 여벌옷이 있는 학생 구하기 -> lost와 reserve 배열 정리
    for (let i = 0; i < lost.length; i++) {
        if (reserve.includes(lost[i])) {
            for (let j = 0; j < reserve.length; j++) {
                if (lost[i] === reserve[j]) {
                    answer.push(reserve[j]);
                    lost[i] = null;
                    reserve[j] = null;
                }
            }
            reserve = reserve.filter(item => item !== null);
        }
    }
    lost = lost.filter(item => item !== null)
  
    // 체육복을 도난 당한 학생 중 앞이나 뒷번호 친구가 여벌 체육복이 있다면 빌리기
    for (let i = 0; i < lost.length; i++) {
        for (let j = 0; j < reserve.length; j++) {
            if (lost[i]-1 === reserve[j] || lost[i]+1 === reserve[j]) {
                answer.push(lost[i]);
                reserve[j] = null;
                break;
            }
        }
        
        reserve = reserve.filter(item => item !== null)
    }
    
    return answer.length;
}
profile
성장을 위한 몸부림

0개의 댓글