ECMAScript | TypeScript

ECMAScript 5.1로 만든 조합(Combination) 함수

partner_jun 2017. 9. 13. 15:41

스칼라로 풀어보았던 문제 중 27번 문제의 알고리즘과 동일하게 작성해 보았다. 

flatMap 대신 배열의 concat 메소드를 이용해야 하는 점이 특이했다. 하지만 head나 tail을 직접 처리해야 한다는 점은 굉장히 까다로웠다.


/**
* 입력받은 배열의 조합을 만드는 함수
* @param n xCn 의 n 값
* @param values 조합으로 만들 값들
*/
function combination(n, values) {

return (function comb(n, values) {
if(!values || values.length === 0) return [];
else if(n === 1 || values.length === 1)
return values.map(x => [].concat(x));

var head = values[0];
var tail = values.splice(1);

var spliceArray = comb(n-1, tail);
spliceArray.map(k => k.push(head));

if(tail.length < n) return spliceArray;
return comb(n, tail).concat(spliceArray);
})(n, values);

}