Lv 1. 체육복

박하린·2021년 6월 2일
0

프로그래머스

목록 보기
14/42

📚 문제

체육복 - 탐욕법(Greedy)
https://programmers.co.kr/learn/courses/30/lessons/42862

⌨️ 코드

function solution(n, lost, reserve){
    let uniLost = lost.filter(value => !reserve.includes(value)); 
  	// 도난당한 학생 중 여벌이 있는 학생은 자신의 체육복을 입기 때문에 filter메소드로 처리해줌
    let uniReserve = reserve.filter(value => !lost.includes(value)); 
  	// 마찬가지로 여벌이 있는 학생 중 도난 당한 학생이 있으면 자신의 체육복을 입기 때문에 filter로 처리

    let answer = n - uniLost.filter(a => {
        let b = uniReserve.find(r => Math.abs(a-r) <= 1);
      		// 여벌이 있는 학생 중에서 도난 당한 학생과 체격 차이가 1 나는 학생을 찾아서 b에 저장
        if (!b) return true;
      		// b가 없다는 것은 체격이 맞지 않아서 체육복을 빌리지 못한 것이기 때문에 true를 리턴해서 uniLost.filter 배열에 담기도록 해주는 부분
        uniReserve = uniReserve.filter(r => r !== b);
      		// uniReserve 배열을 업데이트 - 체육복을 빌려준 학생은 배열에서 없앤다.
    }).length; 
  	// 전체 학생수 - 체육복을 빌리지 못한 학생 수

    return answer;
}

✅ 메소드 정리

Array.find()

  • 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환한다. 그런 요소가 없다면 undefined를 반환한다.

  • syntax

	arr.find(callback[, thisArg])
  • ex)
        var inventory = [
            {name: 'apples', quantity: 2},
            {name: 'bananas', quantity: 0},
            {name: 'cherries', quantity: 5}
        ];

        function findCherries(fruit) {
            return fruit.name === 'cherries';
        } // callback 함수 부분

        console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }
profile
깃허브: https://github.com/khakaa

0개의 댓글

관련 채용 정보