반응형
순열
순서가 상관이 있기때문에, index (중심이 되는 숫자의 index)를 제외한 다른 부분들을 다음 배열에 넣어줌
const getPermutations = function (arr, selectNumber) {
const results = [];
if (selectNumber === 1) return arr.map((e) => [e]);
arr.forEach((fixed, index) => {
const next = [...arr.slice(0, index), ...arr.slice(index+1)]
const permutations = getPermutations(next, selectNumber - 1);
const result = permutations.map((e) => [fixed, ...e]);
results.push(...result);
});
return results;
}
조합
순서가 상관이 없기때문에, 인덱스를 제외한 다른 부분을 다음 배열에 넣어줌
const getCombinations = function (arr, selectNumber) {
const results = [];
if (selectNumber === 1) return arr.map((e) => [e]);
arr.forEach((fixed, index) => {
const next = arr.slice(index + 1);
const combinations = getCombinations(next, selectNumber - 1);
const result = combinations.map((e) => [fixed, ...e]);
results.push(...result);
});
return results;
}
중복순열
모든 배열의 모든 요소가 겹쳐도 상관이 없기때문에 새로운 배열에 기존 배열 자체를 넣어줌
const getPermutations = function (arr, selectNumber) {
const results = [];
if (selectNumber === 1) return arr.map((e) => [e]);
arr.forEach((fixed, index) => {
const permutations = getPermutations(arr, selectNumber - 1);
const result = permutations.map((e) => [fixed, ...e]);
results.push(...result);
});
return results;
}
최대공약수
const gcd = (a, b) => a % b === 0 ? b : gcd(b, a % b);
최소공배수
const lcm = (a, b) => a * b / gcd(a, b);
반응형
'개발 R.I.P.' 카테고리의 다른 글
9.07 Dev.Feedback (토큰 기반 인증) (0) | 2021.09.07 |
---|---|
9.06 Dev.Feedback (HTTPS, Hashing, Cookie) (0) | 2021.09.06 |
9.03 Dev.Feedback (Mongo DB #1) (0) | 2021.09.03 |
8.26 Dev.Feedback (SQL) (0) | 2021.08.26 |
8.24 Dev.Feedback (시간 복잡도) (0) | 2021.08.24 |