TIL

TIL 48: [자료ꡬ쑰/μ•Œκ³ λ¦¬μ¦˜] μ½”λ”© ν…ŒμŠ€νŠΈ μ€€λΉ„

Deviloper😈 2021. 10. 7. 18:59

μ•Œκ³ λ¦¬μ¦˜ λ¬΄μ œμ™€ μ½”λ”© ν…ŒμŠ€νŠΈμ— 자주 λ“±μž₯ν•˜κ³  ν•„μš”ν•œ μ£Όμš” κ°œλ…λ“€μ„ ν•™μŠ΅ν–ˆμŠ΅λ‹ˆλ‹€. 크게 μˆœμ—΄/μ‘°ν•©, λ©±μ§‘ν•©, GCD/LCM(μ΅œλŒ€κ³΅μ•½μˆ˜, μ΅œμ†Œκ³΅λ°°μˆ˜), 멱집합에 λŒ€ν•΄ κ°œλ…μ„ κ°„λ‹¨νžˆ μ •λ¦¬ν•˜κ³ , 문제λ₯Ό ν’€λ©΄μ„œ κ°œλ…μ„ μ μš©ν•΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

큰 틀은 λ™μΌν•œ μƒνƒœμ—μ„œ μΌλΆ€μ˜ λ²”μœ„λ‚˜ ν‘œν˜„λ§Œ λ‹€λ₯΄κ²Œ ν•΄μ€˜λ„ μ€‘λ³΅μˆœμ—΄, μˆœμ—΄, μ‘°ν•© 등을 ν‘œν˜„ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ˜ˆλ₯Ό λ“€μ–΄, λ°°μ—΄μ—μ„œ 5개λ₯Ό μ„ νƒν•˜λŠ” 경우 ν•˜λ‚˜μ˜ 수λ₯Ό μ„ νƒν•˜κ³ , 남은 λ°°μ—΄μ—μ„œ 4개λ₯Ό 선택해야 ν•©λ‹ˆλ‹€. 이후 또 ν•˜λ‚˜μ˜ 수λ₯Ό μ„ νƒν•˜κ³ ,남은 λ°°μ—΄μ—μ„œ 3개λ₯Ό 선택해야 ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 과정은 μž¬κ·€κ³Όμ •μœΌλ‘œ 잘게 λ‚˜λˆŒ 수 μžˆμ–΄ 큰 틀은 λ™μΌν•˜κ²Œ λ©λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ˜€λŠ˜μ€ μ€‘λ³΅μˆœμ—΄, μˆœμ—΄, μ‘°ν•©μ˜ ν…œν”Œλ¦Ώμ„ κ°„λ‹¨ν•˜κ²Œ 정리해보렀고 ν•©λ‹ˆλ‹€!

 

μ€‘λ³΅μˆœμ—΄

//#1
function permutation(rounds, result) {
  if (rounds === 0) {
  	output.push(result); 
  	return;
  }
  for (let i=0; i<game.length;i++) {
  	const nowPlay = game[i]
  	permutation(rounds-1, result.concat(nowPlay)); 
  }
}


//#2
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;
}

 

 

μˆœμ—΄

// #1
function permutation(stuffArr, result, choiceNum) {
  if (choiceNum === 0) {
    output.push(result);
    return;
  }
  for (let i = 0; i < stuffArr.length; i++) {
  	let gredient = stuffArr[i];
  	let sauce = stuffArr.slice();
  	sauce.splice(i,1);
  	permutation(sauce, result.concat(gredient), choiceNum-1)
  }
}


//#2
function permutation(arr, selectNum) {
  let result = [];
  if (selectNum === 1) return arr.map((v) => [v]);

  arr.forEach((v, idx, arr) => {
    const fixer = v;
    const restArr = arr.filter((_, index) => index !== idx);
    const permuationArr = permutation(restArr, selectNum - 1);
    const combineFixer = permuationArr.map((v) => [fixer, ...v]);
    result.push(...combineFixer);
  });
  return result;
}

 

 

μ‘°ν•©

//#1
function combination(cards, result, num) {
  if(num === 0) {
    output.push(result);
    return;
    }
  for (let i=0; i < cards.length; i++) {
    let card = cards[i];
    let rest = cards.slice(i+1);
    combination(rest, result.concat(card), num-1)
  }
}

//#2
function combination(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 = combination(restArr, selectNum - 1);
    const combineFix = combinationArr.map((v) => [fixed, ...v]);
    result.push(...combineFix);
  });
  return result;
}

 

 

μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•

μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ€ 두 수의 μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.

μ—¬κΈ°μ„œ ν˜Έμ œλ²•μ΄λž‘ 두 μˆ˜κ°€ μ„œλ‘œ μƒλŒ€λ°© 수λ₯Ό λ‚˜λˆ„μ–΄μ„œ μ›ν•˜λŠ” 수λ₯Ό μ–»λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ λ§ν•©λ‹ˆλ‹€.

ν˜Έμ œλ²• 증λͺ…은 https://www.youtube.com/watch?v=TxdljAFjTNw μ΄ μ˜μƒμ„ μ°Έκ³ ν•˜μ‹œλ©΄ 될듯 ν•©λ‹ˆλ‹€!

 

 

const getGCD = function (M, N) {
  if (M % N === 0) {
    gcd = N;
    return;
  }
  else {
    getGCD(N, M % N);
  }
}