지식 창고/알고리즘

*작성중* JavaScript 순열 & 조합 알고리즘

감귤밭호지차 2023. 5. 26. 16:44

조합 : nCk

주어진 배열의 서로 다른 n 개의 요소에서 순서를 생각하지 않고 k 개를 선택하는 조합. 중복을 허용하지 않습니다. 

 

const arr = [ 1, 2, 3, 4 ];

3개를 선택하는 조합의 결과물 :  [1, 2, 3], [1, 2, 4], [2, 3, 4], [1, 3, 4]

 

 

 

 

주어진 배열의 요소들을 이용해서 조건에 맞는 배열들을 얼마나 만들 수 있는가

#프로그래머스 LV01: 예산 

https://velog.io/@devjade/JavaScript%EB%A1%9C-%EC%88%9C%EC%97%B4%EA%B3%BC-%EC%A1%B0%ED%95%A9-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

 

JavaScript로 순열과 조합 알고리즘 구현하기

1. 조합 서로 다른 n개의 물건에서 순서를 생각하지 않고 r개를 택할 때, 이것은 n개에서 r개를 택하는 조합이라 하고, 이 조합의 수를 기호로 nCr와 같이 나타낸다. 바로 예를 살펴보도록 하자. 4Com

velog.io

https://pul8219.github.io/algorithm/algorithm-permutation-and-combination/

 

[알고리즘] 순열과 조합, 재귀함수 이해하기(JavaScript)

[알고리즘] 순열과 조합, 재귀함수 이해하기(JavaScript)

pul8219.github.io

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

 

자바스크립트(JS) 약수 모두 출력하기/ 개수(갯수) 구해보기

자바스크립트 약수 구하기는 코딩 테스트에서 조금씩 나오는 문제이면서, 꼭 코딩 테스트 문제 뿐만 아니라 여러가지 다른 요소에서 많이 쓰이는 자바스크립트 나머지 기호를 활용한 대표적인

collocationvoca.tistory.com