const ArrayAllAdd = array => {
return array
.reduce((acc, cur) => {
// acc 누산 결과를 저장할 변수
// cur 현재 요소
return acc.flatMap(
// flat과 map을 합친 기능으로
// 평탄화된 배열을 반환하는 기능
element => cur.map(element2 => element + element2),
// 누산 값의 요소에서
// 현재값(배열)의 요소를 더한 값이 더해진 배열을 생성
[0]
//acc 초기값
);
})
.sort((a, b) => a - b)[k - 1];
// 정렬 및 찾고자 하는 번지 수
};
let n = 3;
let m = 3;
let k = 4;
//배열 개수, 배열 길이, 몇 번째 숫자
let array = [
[1, 4, 7],
[2, 5],
[3, 6],
];
let sum = ArrayAllAdd(array);
console.log(sum);
n = 4;
m = 2;
k = 7;
array = [
[1, 10],
[2, 3],
[4, 5],
[6, 7],
];
sum = ArrayAllAdd(array);
console.log(sum);
처음에는 각 배열을 무작정 반복문을 중첩시켜 다
더할려고 했다...
그런데 생성될 수 있는 배열의 개수도
무궁무진하고, 각 배열의 길이도 무궁무진한 상태라
다른 방법을 찾아봤다.
그 결과 reduce, flatMap, map을 사용하면
반복 없이 모든 배열의 요소를 더한 배열을
만든 수 있었다.
reduce는 알고는 있지만 손이 잘 안 가는 함수라
다시 기능을 정리하면
reduce((acc,cur, 초기값)=>
{
})
으로
acc는 누산된 결과
cur은 현재값
초기값은 : 초기 acc의 값
이다.
flatMap은
flat과 map이 합쳐진 함수로
flat(num(중첩된 배열 제거할 수))은 중첩된 배열을 평탄화 해주는 함수이다.
ex) let array = [1,[2,[3,[4,[5]]]]] 을 flat함수를 사용하면
array.flat()
[1,2,[3,[4,[5]]]]로
[2,[3,[4,[5]]]]]이 2,[3,[4,[5]]]]으로 바뀌고
1과 붙여진 배열이 돼서
[1,2,[3,[4,[5]]]]이 된다.
만약,
array.flat(Infinate)를 주면
1,2,3,4,5로 배열을 완전히 제거할 수 있다.
따라서 flatMap은 중첩된 배열에서 배열을 제거한 후
map에서 조작한 새로운 배열을 리턴한다.
'Challenge' 카테고리의 다른 글
3-3 Challenge (0) | 2024.08.27 |
---|---|
CMD 게임 만들기 4Days (0) | 2024.08.26 |
3-2 Challenge 배열에 1 최대 개수 구하기 (0) | 2024.08.26 |
3-1 Challenge 두산이 안타를 몇 개 쳐야 이기는가? (0) | 2024.08.26 |
CMD 게임 만들기 3Days (0) | 2024.08.23 |