반응형
문제를 풀 때 활용해야 할 경우가 많다. 그냥 암기하자.
순열
: 순서를 고려해서 요소 선택
- 예를 들어, [1, 2, 3]의 순열은 [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]와 같이 6가지
const getPermutation = (arr, n) => {
if (n === 1) return arr.map(v => [v]);
const result = [];
arr.forEach((fixed, idx, origin) => {
const rest = [...origin.slice(0, idx), ...origin.slice(idx + 1)];
const perms = getPermutation(rest, n - 1);
const attached = perms.map(perm => [fixed, ...perm]);
result.push(...attached);
});
return result;
}
조합
: 순서를 고려하지 않고 몇가지 요소 선택하는 방법
- 예를 들어, [1, 2, 3]에서 2개의 요소를 선택하는 조합은 [1, 2], [1, 3], [2, 3]와 같이 3가지
onst getCombinations = function (arr, selectNumber) {
const results = [];
if (selectNumber === 1) return arr.map((el) => [el]);
arr.forEach((fixed, index, origin) => {
const rest = origin.slice(index + 1);
const combinations = getCombinations(rest, selectNumber - 1);
const attached = combinations.map((el) => [fixed, ...el]);
results.push(...attached);
});
return results;
}
반응형
'알고리즘 문제 풀기' 카테고리의 다른 글
프로그래머스: 등산코스 정하기 - javascript (다익스트라 알고리즘 ) (0) | 2024.06.18 |
---|---|
프로그래머스: 외벽 점검 - javascript(깔쌈한 구현 문제, 순열 활용) (1) | 2024.06.17 |
프로그래머스: 표현 가능한 이진트리 - javascript(이진트리, 포화이진트리) (0) | 2024.06.17 |
프로그래머스: 광고 삽입 - javascript(시간 변환, 누적합) (0) | 2024.06.04 |
프로그래머스: 기둥과 보 설치 (빡센 구현) (1) | 2024.05.30 |