πŸ“λ©”λͺ¨μ΄μ œμ΄μ…˜ ν™œμš©ν•˜μ—¬ μ‹œκ°„νš¨μœ¨μ„± 높이기

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

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

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

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


μˆœμ—΄ 쑰합을 κ³΅μ‹μ‚¬μš©ν•˜μ§€ μ•Šκ³  κ΅¬ν˜„ν•˜κΈ°

을 ν•΄κ²°ν•˜λŠ” κ³Όμ •μ—μ„œ, n κ³Ό r 이 μ»€μ§€κ²Œ 되면 μ—„μ²­λ‚œ μ‹œκ°„μ΄ κ±Έλ¦¬λŠ” 것을 μ•Œμˆ˜μžˆλ‹€. 쑰금 더 효율적인 방법을 κ³ μ•ˆν•˜κΈ° μœ„ν•΄ λ©”λͺ¨μ΄μ œμ΄μ…˜ 기법을 ν™œμš©ν•΄ λ³΄μ•˜λ‹€.

βœ…Β ν•΄κ²°


λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ 톡해 λ¬Έμ œμ— λ‚˜μ™€μžˆλŠ” λ²”μœ„(nκ³Όr) λ₯Ό 컀버가λŠ₯ν•œ 2차원 배열을 μƒμ„±ν•˜μ—¬, ν•΄λ‹Ή nCr 의 값을 μ €μž₯ν•΄λ‘μ—ˆλ‹€. 이 방법은 이미 κ³„μ‚°λœ μ‘°ν•©μ˜ 값을 λ°”λ‘œ λΆˆλŸ¬λ‹€κ°€ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— λΆˆν•„μš”ν•œ 탐색을 μ€„μΌμˆ˜μžˆλ‹€.

이λ₯Ό ν†΅ν•˜μ—¬ κ΅¬ν˜„ν•œ μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

function solution(number, range) {
  let answer = [];
  let dy = Array.from(Array(34), () => Array(34).fill(0));
  function DFS(n, r) {
    if (dy[n][r] > 0) return dy[n][r];
    // μœ„μ™€ 같은 λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ ν™œμš©ν•˜μ—¬ 효율적으둜 계산가λŠ₯ν•˜λ‹€.
		// 0으둜 μ΄ˆκΈ°ν™” μ‹œμΌœλ‘” dy 에 0이 μ•„λ‹Œ 값이 λ“€μ–΄κ°€μžˆλ‹€λ©΄ κ·Έ 값을 return ν•˜λŠ” ν˜•μ‹μ΄λ‹€.    
    
		if (r === 0 || n === r) {
      return 1;
    } else {
      return (dy[n][r] = DFS(n - 1, r - 1) + DFS(n - 1, r));
    }
  }
  answer = DFS(number, range);
  return answer;
}
profile
μ£Όλ‹ˆμ–΄ ν”„λ‘ νŠΈμ—”λ“œ 개발자 이광렬 μž…λ‹ˆλ‹€ 🌸

0개의 λŒ“κΈ€