자주 사용할 것 같은 알고리즘 템플릿

Jaemin Jung·2021년 7월 26일
0

Algorithm

목록 보기
7/8
post-thumbnail

주기적으로 추가 예정

// 매트릭스 생성 (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);
}
profile
내가 보려고 쓰는 블로그

0개의 댓글