모든 경우의 수를 순서대로 나열하는 방법인 순열을 정리한다.
순서가 있으면 순열, 순서가 없으면 조합이다.
순열을 계산하는 방법은 아래와 같다.
그러나 경우의 수를 구하는 것 보다는, 경우의 리스트를 반환하는 방식으로 문제가 출제되는 것 같다.
순열과 다르게 중복순열은 중복을 허용한다.
function main(nums) {
let result = [];
perm(result, nums, 0);
return result;
}
function perm(result, nums, depth) {
if (depth === nums.length) {
result.push(nums.map(n => n)); //deep copy
return result;
}
//swap and deep down
for (let i = depth; i < nums.length; i++) {
swap(nums, i, depth);
perm(result, nums, depth + 1);
swap(nums, i, depth);
}
}
function swap(arr, a, b) {
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
console.log(main([1, 2, 3]));
// [
// [1, 2, 3],
// [1, 3, 2],
// [2, 1, 3],
// [2, 3, 1],
// [3, 2, 1],
// [3, 1, 2]
// ]
다음엔 조합(Combination) 을 정리해보도록 한다.
[kafka] consumer와 partition 의 이상적인 비율 (0) | 2020.03.31 |
---|---|
[algorithm] LinkedHashMap - 순서를 유지하는 HashMap (0) | 2020.02.22 |
[Git] git ssh clone시 'The authenticity of host ~ can't be established 오류 해결하는 방법 (1) | 2020.01.17 |
[Kafka] Spring kafka의 KafkaConsumerFactory의 옵션 값을 알아보자. (0) | 2020.01.13 |
[Architecture] 이벤트 버스 패턴(Event bus pattern) 정리 (0) | 2020.01.13 |
댓글 영역