nPr 계산

3P2은 3개 중 2개를 뽑아 줄 세우는 경우의 수

{1, 2, 3}중 2개를 뽑아 줄을 세우면

{1, 2}를 뽑아 줄을 세울 수 있겠습니다.

{1, 2}, {2, 1} 2개가 나왔습니다.

{1, 3}도 2개가 나오겠죠 {2, 3}도 2개가 나올 것입니다.

이렇게 총 6개가 나오게 됩니다.

공식은 3 * 2!이 됩니다.

여기에 combination은 이를 2!으로 나누어 주는 것입니다. nCr이라고 씁니다.

permutation을 계산하는 함수를 만들기 위해서는 중첩된 반복문을 돌게됩니다.

예를 들어 {1, 2, 3}의 permutation을 계산하겠습니다.

const a = [1, 2, 3];
a.forEach((i1)=>{
    a.forEach((i2)=>{
        if(i1!=i2) {
            a.forEach((i3)=>{
            if(i3!=i1 && i3!=i2){
                console.log(i1,i2,i3)
            }
        })
        }
    })
});

배열 [1, 2, 3]을 돌면서 경우의 수를 계산하기 위해서는 첫번째 자리가 1이면서, 두번째 자리가 2, 세번째 자리가 3인 경우

첫번째 자리가 1이면서, 두번째 자리가 3, 세번째 자리가 2인 경우

이런식으로 배열을 순회하게 됩니다.

if문에서 각 자리수가 중복되지 않게 해주는 것입니다. 반복문을 그냥 두게 되면

첫번째 자리가 1이면서, 두번째 자리가 1, 세번째 자리가 1인 경우를 계산하게 됩니다.

이 경우를 건너뛰게 해주는 것이죠

감사합니다.