수학 기본 이론|경우의 수 (순열, 조합)

셀라문·2022년 3월 1일
0
post-thumbnail

경우의 수

순열

예제 1

let input = ['a', 'b', 'c'];
let count = 0;

function permutation(arr) {
  // for i -> 첫번째 index 위치시킬 요소 [i, 0, 0]
for ( let i = 0; i < arr.length; i++){
  // for j -> 두번째 index 위치시킬 요소 [i, j, 0]
  for ( let j = 0; j < arr.length; j++){
    if(i == j) continue;  // i랑 j 같을 경우 skip처리
    // for k -> 세번째 index 위치시킬 요소 [i, j, k]
    for (let k = 0; k < arr.length; k++){
      if(i == k) continue;  // i랑 k 같을 경우 skip처리
      if(k == j) continue;  // k랑 j 같을 경우 skip처리
    
      console.log(arr[i], arr[j], arr[k]);
    }
  }
}

}

permutation(input);
console.log(count);

예제 2 재귀함수 사용

let input = ['a', 'b', 'c'];
let count = 0;

function permutation(arr, s, r) {
  //1. 재귀함수를 멈춰야할 조건
  if(s == r){
    count++;
    console.log(arr.join(""));  // join : 문자열로 변경
    return;
  }
  //2. 재귀를 돌면서 변경되어야 될 부분/메인로직
  for(let i = s; i <arr.length; i++){
    [arr[s], arr[i]= arr[i], arr[s]]; // swap
    permutation(arr, s+1, r);
    [arr[s], arr[i]= arr[i], arr[s]]; // 원상복귀 
    
  }
}

permutation(input, 0, 2);  // start위치:0, 몇번까지 뽑아야 하는지 : 2
console.log(count);

조합

그림 잘못 그려짐 빨간 화살표 참고..

profile
취미로 하는 공부기록장

0개의 댓글