CodingSpace

프로그래머스#49(Lv.1)_체육복 본문

프로그래머스/Level1

프로그래머스#49(Lv.1)_체육복

개발자_조이킴 2021. 11. 3. 16:02

체육복

다른 분들이 하신것 보고 배우고 또 배우자! (find 메소드!)

 

※ find MDN

 

 

포기하지말고 계속해서 공부하자!

화이팅:)

 

입출력 예시

 

// 프로그래머스 - 체육복

function solution(n, lost, reserve) {
    
    // 여벌을 가지고 있지만 두벌 중 한번을 도둑 맞은 경우, 해당 학생(번호)를 lost와 reserve에서 모두 제거
    let newLost = lost.filter((el) => !reserve.includes(el))
    let newReserve = reserve.filter((el) => !lost.includes(el))
    
    // 오름차순으로 정렬: 최대한 많은 학생들에게 체육복을 나눠주기 위함
    newLost.sort((a, b) => a - b)
    newReserve.sort((a, b) => a - b)
    
    // reserve의 길이가 0이 될때까지 while문을 돌려준다.
    while(newReserve.length > 0) {
        
        // reserve 맨 앞의 요소를 head에 할당
        // reserve 맨 앞의 요소는 제거 (하나씩 차감)
        let head = newReserve.shift()
        
        for(let i = 0; i < newLost.length; i++) {
            // 배열 lost i번째 요소에 +1, -1 값이 head와 같다면 해당 요소를 배열 lost에서 제거
            if(newLost[i] - 1 === head || newLost[i] + 1 === head) {
                newLost.splice(i, 1)
                break;
            }
        }

    }

    // 전체학생 수 n에서 여벌의 체육복을 받지 못한 친구들의 명수(lost.length)를 뺴준다
    return n - newLost.length
}

 

<다른분의 solution>

 

 

Comments