순열: n개중에 r개를 뽑아서 순서를 부여하여 조합할 수 있는 모든 경우의 수 nPr
조합: n개중에 r개를 순서와 상관없이 뽑아 조합할 수 있는 모든 경우의 수 nCr
중복 순열: 요소의 중복을 허용하고 순서를 부여하여 조합할 수 있는 모든 경우의 수
3개 중 3개를 뽑아 중복 순열을 만들어보자.=> 모든요소를 다 넣음
function forloop() {
let result =[]; //만든 중복순열 반환할 때
let lookup =[1,2,3 ];
for (let i = 0; i < 3; i++){
let pick1 = lookup[i];
for (let j=0; j< 3; j++){
let pick2 = lookup[j];
for (let k = 0; k<3; k++){
let pick3 = lookup[k];
result.push([pick1, pick2, pick3]);
}
}
}
return result
}
function forloop() {
let result =[];
let lookup =[1,2,3 ];
for (let i = 0; i < 3; i++){
for (let j=0; j< 3; j++){
for (let k = 0; k<3; k++){
result.push([lookup[i],lookup[j],lookup[k])
}
}
}
return result
}
***재귀를 사용한 중복순열 3개중 3개를 뽑아서***
let result =[];
const lookup =[1,2,3];
const recursion =(count, bucket)=>{
if (count ===0){ //탈출조건
result.push(bucket);
return;
}
//재귀를 통해서 실행시키고자 하는 코드
for(let i=0; i< 3; i++){
const pick = lookup[i];
recursion(count -1, bucket.concat(pick));
//재귀시키는 코드 concat사용하는 이유 =>concat은 배열로 나오는 반면 push하면 길이가 나오기 때문에
}
}
recursion(3,[])
3개중 3개를 뽑아서 순열을 만들자=> 마지막이나 중간에서 중복된 요소가 있다면 패스
function forloop() {
let result =[];
let lookup =[1,2,3 ];
for (let i = 0; i < 3; i++){
for (let j=0; j< 3; j++){
for (let k = 0; k<3; k++){
if (i ===j|| j===k|| k===i) continue;
result.push([lookup[i],lookup[j],lookup[k]);
}
}
}
return result
}
3개중에 두개 뽑는 조합 => 순서를 지켜서 뽑음
function forloop() {
let result =[];
let lookup =[1,2,3 ];
for(let i = 0 ; i< 3 ;i ++){
for(let j= i+1 ; j< 3; j++){ //1로 만들 수 있는 경우의 수를 다 만들었다면 1은 사실상 그 다음에 쓸모가 없기때문에 j= i+1
result.push([lookup[i], looup[j]]);
}
}
return result
}