let input = [1,2,3,4];
let count = 0;
function combination(arr){
for(let i = 0; i< arr.length; i++){
for( let j = i+1; j < arr.length; j++){
count++;
console.log(arr[i], arr[j]);
}
}
}
combination(input);
console.log(count);
첫 번째 요소를 고정하고 남은 요소에서 반복문을 돌리고
다음 요소를 고정하고 또 남은 요소에서 반복문 돌리기
뽑아야하는 개수만큼 for 반복문의 수가 늘어나서 비효율적
let input = [1,2,3,4];
let output = [];
let count = 0;
function combination(arr, data, s, idx, r){
if( s == r){
count++;
console.log(data);
return;
}
for( let i = idx; arr.length - i >= r - s; i++){
data[s] = arr[i];
combination(arr, data, s+1, i+1, r);
}
}
combination(input,output, 0, 0, 2);
console.log(count);
ex) [1,2,3,4]에서 2개를 뽑는 경우
처음에 i의 범위 설정을 두고서 한참을 생각했다.
그리고 재귀를 타고 들어가면서 인덱스가 어떻게 업데이트 되고
어떤 인자(s, i, idx ?)를 업데이트 해야 하는지가 가장 헷갈렸다
재귀를 반복해서 공부 해야겠다