본문 바로가기

⏳ 알고리즘/JavaScript 알고리즘

프로그래머스 - LV1. 체육복

문제

https://programmers.co.kr/learn/courses/30/lessons/42862?language=javascript 

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번

programmers.co.kr

 

코드

function solution(n, lost, reserve) {
    //잃어버렸지만 여분있는 학생 : buthave
    let buthave = lost.filter(x => reserve.includes(x))
    lost = lost.filter(x => buthave.includes(x) == false)
    reserve = reserve.filter(x => buthave.includes(x) == false)
    
    for (let i=0; i<lost.length; i++) { 
        //잃어버리고 여분도 없어서 빌려야 하는 학생
        if (reserve.includes(lost[i]-1)) {
            reserve.splice(reserve.indexOf(lost[i]-1), 1); 
            lost.splice(i,1); 
            i -= 1 
        } else if (reserve.includes(lost[i]+1)) {
            reserve.splice(reserve.indexOf(lost[i]+1), 1); 
            lost.splice(i,1); 
            i -= 1 
        } 
    }
    
    return n - lost.length
}

 

[배운 점]

  • 자바스크립트 filter함수
arr.filter(callback(element[, index[, array]])[, thisArg])

EX) 다음 예는 값이 10 이하인 모든 요소가 제거된 걸러진 배열을 만들기 위해 filter()를 사용한다.

function isBigEnough(value) {
  return value >= 10;
}

var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered 는 [12, 130, 44]