두 함수 모두
Array.prototype의
메서드이다.
filter
주어진 함수 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
find
find() 메서드는 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/find
n lost reserve return
5 [2, 4] [1, 3, 5] 5
5 [2, 4] [3] 4
3 [3] [1] 2
function solution(n, lost, reserve) {
const temp = lost.filter(l => {
const f = reserve.find(r => Math.abs(r-l) == 1)
if(!f) return true
reserve = reserve.filter(r => r !== f)
});
return n - temp.length
}
출쳐 : [프로그래머스 문제 및 좋아요 숫자를 제일 많이 받은 해답 내용 참고]
filter와 find를 잘 활용하면 긴 코드를 위와 같이 짧게 줄여 활용할 수 있다.
핵심은 비교 되는 배열의 원소끼리 절대값이 1이 되는 학생의 숫자를 파악하는 것.
이 과정에서 중복되는 것을 filter 와 find 메서드를 절차적으로 적절히 위치시켜 중복 처리 함.
배울 점이 많아 포스팅
includes
includes() 메서드는 배열이 특정 요소를 포함하고 있는지 판별
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
function solution(n, lost, reserve) {
const realReserve = reserve.filter(r => !lost.includes(r));
const realLost = lost.filter(r => !reserve.includes(r));
const ableNum = realLost.filter(a => {
return realReserve.find((b, i) => {
const has = b === a-1 || b === a+1;
if (has) {
delete realReserve[i];
}
return has;
});
}).length;
return n - (realLost.length - ableNum);
}
프로그래머스의 해답 중 하나를 갖고왔습니다.
두 번째 해답 코드이다
includes를 활용하여 프로그래밍하였는데
위 코드는 정확성에서 좋지못한 점수를 받았고
이번 코드는 100점 받아
추가로 해답 코드를 올린다.
더불어
delete 연산자를 사용했는 데 이는 배열이 아닌 객체에 쓰는 것이라고 정의하지만
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/delete
delete 연산자는 객체의 속성을 제거 및 배열에서도 작동하는 것을 확인 이유는 배열 또한 객체이므로
const array1 = [5, 8, 130, 44];
delete array1[0]
console.log(array1)
결과
Array [undefined, 8, 130, 44]
최종적으로
이둘을 합쳐 해답을 내면
다음과 같이 할 수 있다.
function solution(n, lost, reserve) {
let realReserve = reserve.filter(r => !lost.includes(r));
let realLost = lost.filter(r => !reserve.includes(r));
// const reserveNum = reserve.lenght - realReserve.length;
const temp = realLost.filter(l => {
const f = realReserve.find(r => Math.abs(r-l) == 1)
if(!f) return true
realReserve = realReserve.filter(r => r !== f)
});
return n - temp.length
}
'IT > Javascript' 카테고리의 다른 글
reactJS란? (0) | 2021.02.14 |
---|---|
실행 컨텍스트(execution context) (0) | 2021.02.07 |
은닉화, 자동화, 객체화, 중복 최소화, 결합도 낮춤, 샤이 코드 ... 같은 맥락? (0) | 2021.01.18 |
location.href - 페이지 이동 (0) | 2021.01.10 |
(4-7) 심볼형 (0) | 2020.07.19 |