조합 : nCk
주어진 배열의 서로 다른 n 개의 요소에서 순서를 생각하지 않고 k 개를 선택하는 조합. 중복을 허용하지 않습니다.
const arr = [ 1, 2, 3, 4 ];
3개를 선택하는 조합의 결과물 : [1, 2, 3], [1, 2, 4], [2, 3, 4], [1, 3, 4]
주어진 배열의 요소들을 이용해서 조건에 맞는 배열들을 얼마나 만들 수 있는가
#프로그래머스 LV01: 예산
https://pul8219.github.io/algorithm/algorithm-permutation-and-combination/
function sumFunc(arr){
//배열 입력 받으면,
return arr.reduce((acc, cur) => acc + cur);
}
function solution(d, budget) {
if(sumFunc(d) === budget){
return d.length;
}
let combination = [];
let temp = d[0];
let cnt = 0;
let newArr = [];
for( let i = 0 ; i < d.length; i++){
//새 배열에 d 배열 요소를 하나 씩 넣는다.
combination.push(d[i]);
if(sumFunc(combination) < budget){
//sumFunc([0]) = 0 < budget
//해당 i요소가 사라진 새 배열 - newArr : [ 3, 2, 5, 4]
newArr = d.slice(i+1, d.length);
//그렇게 줄어든 배열로 다시 재귀를 돌리는거임.
return solution(newArr, budget)
}else if (sumFunc(combination) > budget){
cnt++;
}
}
return cnt;
}
풀이 : 조합을 생각해서 배열의 첫 번째 요소를 기준으로 재귀함수를 돌리면서 sumFuc 이라는 함수를 만들어서 구하려 했으나 머리가 더 안 돌아감.
아예 잘 못 생각하고 있었음 이렇게까지 파고 들 문제가 아니었음 간단하게 다시 생각해보면.. 쉬웠던
무조건 누적 덧셈 하려 하지말꼬 최종 값에서 요소들을 빼주는 식으로 접근을 할 수 있었음..
프로그래머스 LV 01: 약수의 갯수와 덧셈
약수를 구하는 공식은 잊지 말자 .
https://collocationvoca.tistory.com/28
'지식 창고 > 알고리즘' 카테고리의 다른 글
신입이 알아둬야 할 필수 알고리즘 (1) | 2023.05.11 |
---|---|
*작성 중 ** [알고리즘] 피보나치 - 재귀함수와 동적계획법 알고리즘 (0) | 2023.04.25 |