스칼라로 풀어보았던 문제 중 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);
}
'ECMAScript | TypeScript' 카테고리의 다른 글
스타일시트(CSS), 스크립트(Script) 동적으로 추가/제거하기 (0) | 2017.11.07 |
---|---|
ECMAScript, 배열의 splice와 slice 메소드 (0) | 2017.09.27 |
ESCMAScript, Proxy와 Proxy Handler (0) | 2017.09.11 |
ECMAScript, 딕셔너리와 Map (0) | 2017.08.21 |
ECMAScript, Function.prototype의 bind 함수(this 지정, 커링) (0) | 2017.08.17 |