πŸ“μ΄ν•­κ³„μˆ˜ ν™œμš©ν•œ μˆ˜μ—΄ μΆ”μΈ‘

10_2pangΒ·2023λ…„ 6μ›” 5일
0

βš½οΈνŠΈλŸ¬λΈ”μŠˆνŒ…

λͺ©λ‘ 보기
61/94
post-thumbnail

πŸ‘¨β€πŸ’»Β μ‚¬κ±΄


1~N κΉŒμ§€μ˜ 수λ₯Ό

1  2  3  4
  3  5  7
	 8  12
		20

μœ„ 와 같은 ν˜•νƒœλ‘œ κ·Έλ €λ‚˜κ°„λ‹€κ³  ν• λ•Œ, κ°€μž₯ μ•„λž˜μ˜ 숫자 F 와 1~N 의 N 을 μ£Όμ–΄μ§ˆλ•Œ κ°€μž₯ 첫단 (μ˜ˆμ‹œλ‘œλŠ” 1234) 을 μ˜ˆμΈ‘ν•˜λŠ” 문제λ₯Ό ν’€μ–΄λ³΄μ•˜λ‹€.

μ²˜μŒμ—λŠ” 1~NκΉŒμ§€μ˜ μˆœμ—΄μ„ μ €μž₯ν•˜μ—¬, 각각 μ „λΆ€ 파슀칼 μ‚Όκ°ν˜•μ˜ ν˜•νƒœλ‘œ μœ„μ™€ 같이 계산해 λ‚΄λ €κ°„ν›„ F와 λ§žλŠ”κ²ƒμ„ 찾고자 ν•˜μ˜€λ‹€. κ·Έλ ‡κ²Œ λœλ‹€λ©΄, λ„ˆλ¬΄ μ‹œκ°„λ³΅μž‘λ„κ°€ λ†’μ•„μ§€κΈ°λ•Œλ¬Έμ— μ΄ν•­κ³„μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό ν’€μ–΄λ³΄μ•˜λ‹€.

βœ…Β ν•΄κ²°


일단 μ΄λ¬Έμ œλŠ” μ΄ν•­κ³„μˆ˜λ₯Ό ν™œμš©ν•˜λ©΄, μ²«λ‹¨μ˜ μ€„λ§Œ μ•Œμˆ˜μžˆμœΌλ©΄ λ°”λ‘œ 합계λ₯Ό κ΅¬ν• μˆ˜μžˆλ‹€.

IMG_2425.heic

μœ„μ˜ μ‚¬μ§„μ²˜λŸΌ N에 따라 각 μ²«λ‹¨μ˜ λ°°μ—΄μ˜ κ°œμˆ˜λŠ”

(Nβˆ’1)C0(N-1)C0,(Nβˆ’1)C1(N-1)C1,…,(Nβˆ’1)C(Nβˆ’1)(N-1)C(N-1)

이 λœλ‹€.

그럼 첫단이 μ£Όμ–΄μ§ˆλ•Œ ν•©κ³„λŠ”
Arr[0](Nβˆ’1)C0(N-1)C0+Arr[1](Nβˆ’1)C1(N-1)C1+…+Arr[N-1]*(Nβˆ’1)C(Nβˆ’1)(N-1)C(N-1) 이 λœλ‹€.

이λ₯Ό ν™œμš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•΄ λ‚˜κ°”λ‹€.

function solution(n, f) {
  let answer = [];
  let firstArrayFlag = 0;
  let dy = Array.from(Array(11), () => Array(11).fill(0));
  let visited = Array.from({ length: n + 1 }, (v) => 0);
  let numArr = Array.from({ length: n }, (v) => 0);
  let calNumArr = Array.from({ length: n }, (v) => 0);
  function combination(n, r) {
    if (dy[n][r] > 0) return dy[n][r];
    if (r === 0 || n === r) {
      return 1;
    } else {
      return (dy[n][r] = combination(n - 1, r - 1) + combination(n - 1, r));
    }
  }
  for (let i = 0; i < n; i++) {
    calNumArr[i] = combination(n - 1, i);
  }
  function DFS(level, sum) {
    if (firstArrayFlag) {
      return;
    }
    if (level === n && sum === f) {
      answer = [...numArr];
      firstArrayFlag = 1;
    } else {
      for (let i = 1; i <= n; i++) {
        if (visited[i] === 0) {
          visited[i] = 1;
          numArr[level] = i;
          DFS(level + 1, sum + calNumArr[level] * numArr[level]);
          visited[i] = 0;
        }
      }
    }
  }
  DFS(0, 0);
  return answer;
}
console.log(solution(4, 16));
profile
μ£Όλ‹ˆμ–΄ ν”„λ‘ νŠΈμ—”λ“œ 개발자 이광렬 μž…λ‹ˆλ‹€ 🌸

0개의 λŒ“κΈ€