// 매트릭스 생성 (board)
new Array(legnth).fill(0).map( row => new Array(length).fill(0))
// 좌표가 유효한 좌표인지 확인하는 함수
const isValid = (row, col) => row >= 0 && row < R && col >= 0 && col < C;
// 소수 여부 확인하는 함수
function isPrime(num){
if (num === 1){
return false
}
let count = 0;
for (let i = 1; i <= num; i++){
if (num%i === 0){
count++
}
if(count > 2){
return false
}
}
return true
}
// 중복 순열 만들기
function permutation(arr, selectNum) {
const result = [];
if (selectNum === 1) return arr.map((v) => [v]);
arr.forEach((v, idx, arr) => {
const fixed = v;
const restArr = arr;
const permutationArr = permutation(restArr, selectNum - 1);
const combineFix = permutationArr.map((v) => [fixed, ...v]);
result.push(...combineFix);
});
return result;
}
// 중복 없는 순열 만들기
function permutation(arr, selectNum) {
const result = [];
if (selectNum === 1) return arr.map((v) => [v]);
debugger;
arr.forEach((v, idx, arr) => {
const copyArr = [...arr.slice(0, idx), ...arr.slice(idx+1)];
const fixed = v;
const permutationArr = permutation(copyArr, selectNum - 1);
const combineFix = permutationArr.map((v) => [fixed, ...v]);
result.push(...combineFix);
});
return result;
}
// 조합(경우의 수) 만들기
function getCombination(arr, selectNum) {
const result = [];
if (selectNum === 1) return arr.map((v) => [v]);
arr.forEach((v, idx, arr) => {
const fixed = v;
const restArr = arr.slice(idx + 1);
const combinationArr = getCombination(restArr, selectNum - 1);
const combineFix = combinationArr.map((v) => [fixed, ...v]);
result.push(...combineFix);
});
return result;
}
// 유클리드 호제법 (최대 공약수)
function gcd(m, n) {
if (m % n === 0) return n;
return gcd(n, m % n);
}