ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [μ•Œκ³ λ¦¬μ¦˜] μž¬κ·€ ν•¨μˆ˜
    codeStates front-end/Algorithm 2023. 2. 14. 15:12
    λ°˜μ‘ν˜•

     

     

     

    πŸ“Œ μž¬κ·€

     

     

    πŸ“μž¬κ·€μ˜ 이해

     

    μž¬κ·€ : μ›λž˜μ˜ 자리둜 λ˜λŒμ•„κ°€κ±°λ‚˜ λ˜λŒμ•„μ˜΄

     

    πŸ”— μž¬κ·€μ˜ μ½”λ“œ

     

    function recursion () {
      console.log("This is")
      console.log("recursion!")
      recursion()
    }

     

    recursion() ν•¨μˆ˜?

    자기 μžμ‹ μ„ 끝없이 ν˜ΈμΆœν•˜λ©΄μ„œ 같은 μ½”λ“œκ°€ κ³„μ†ν•΄μ„œ μ‹€ν–‰λœλ‹€

     

     

    πŸ‘‰πŸΌ 이 ν•¨μˆ˜μ²˜λŸΌ 자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜λ₯Ό μž¬κ·€ ν•¨μˆ˜λΌκ³  ν•œλ‹€

     

     

     

    πŸ”—  μž¬κ·€λ‘œ 문제 ν•΄κ²°ν•˜κΈ°

     

    문제 : μžμ—°μˆ˜λ‘œ 이루어진 리슀트(λ°°μ—΄)을 μž…λ ₯λ°›κ³ , 리슀트의 합을 λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜ 'arrSum'을 μž‘μ„±ν•˜μ„Έμš”.

     

     

    1. 문제λ₯Ό μž‘κ²Œ μͺΌκ°œκΈ°

     

    [1, 2, 3, 4, 5] 의 합을 κ΅¬ν•˜λŠ” κ³Όμ •

     

    1 + 2 + 3 + 4 + 5 =?

    2 + 3 + 4 + 5 =?

    3 + 4 + 5 =?

    4 + 5 =?

    ...

     

    μœ„ λ°©μ‹μœΌλ‘œ 문제λ₯Ό μͺΌκ° κ²ƒμ„ μ½”λ“œλ‘œ ν‘œν˜„

     

    arrSum([1, 2, 3, 4, 5]) === 1 + arrSum([2, 3, 4, 5])
    arrSum([2, 3, 4, 5]) === 2 + arrSum([3, 4, 5])
    ...

     

     

    2. 문제λ₯Ό κ°€μž₯ μž‘μ€ λ‹¨μœ„λ‘œ μͺΌκ°œκΈ°

     

    ...
    arrSum([3, 4, 5]) === 3 + arrSum([4, 5])
    arrSum([4, 5]) === 4 + arrSum([5])
    arrSum([5]) === 5 + arrSum([]) // 더 이상 μͺΌκ°€ 수 μ—†λŠ” μƒνƒœ

     

     

    3. 문제 ν•΄κ²°ν•˜κΈ°

     

    κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ 문제λ₯Ό ν•΄κ²°ν•œ λ°©μ‹μœΌλ‘œ 문제 전체λ₯Ό ν•΄κ²°

     

    arrSum([]) === 0; // <-- κ°€μž₯ μž‘μ€ 문제λ₯Ό 빈 λ°°μ—΄μ˜ ν•© 0으둜 리턴
    // κ°€μž₯ μž‘μ€ 경우의 해결책을 μ μš©ν•©λ‹ˆλ‹€.
    arrSum([5]) === 5 + arrSum([]) === 5 + 0 === 5;
    arrSum([4, 5]) === 4 + arrSum([5]) === 4 + 5 === 9;
    arrSum([3, 4, 5]) === 3 + arrSum([4, 5]) === 3 + 9 === 12;
    arrSum([2, 3, 4, 5]) === 2 + arrSum([3, 4, 5]) === 2 + 12 === 14;
    arrSum([1, 2, 3, 4, 5]) === 1 + arrSum([2, 3, 4, 5]) === 1 + 14 === 15;

     

    μž‘μ„± μ½”λ“œ

     

    function arrSum (arr) {
      // 빈 배열을 λ°›μ•˜μ„ λ•Œ 0을 λ¦¬ν„΄ν•˜λŠ” 쑰건문
      //   --> κ°€μž₯ μž‘μ€ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ½”λ“œ & μž¬κ·€λ₯Ό λ©ˆμΆ”λŠ” μ½”λ“œ
      if (arr.length === 0) {
        return 0
      }
    
      // λ°°μ—΄μ˜ 첫 μš”μ†Œ + λ‚˜λ¨Έμ§€ μš”μ†Œκ°€ λ‹΄κΈ΄ 배열을 λ°›λŠ” arrSum ν•¨μˆ˜
      //   --> μž¬κ·€(자기 μžμ‹ μ„ 호좜)λ₯Ό 톡해 문제λ₯Ό μž‘κ²Œ μͺΌκ°œλ‚˜κ°€λŠ” μ½”λ“œ
    	return arr.shift() + arrSum(arr)
    }

     

     

     

    πŸ”—  μž¬κ·€ μ‚¬μš© μ˜ˆμ‹œ

     

    1. 주어진 문제λ₯Ό λΉ„μŠ·ν•œ ꡬ쑰의 더 μž‘μ€ 문제둜 λ‚˜λˆŒ 수 μžˆλŠ” 경우

    2. μ€‘μ²©λœ 반볡문이 λ§Žκ±°λ‚˜ 반볡문의 쀑첩 횟수(number of loops)λ₯Ό μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ €μš΄ 경우

     

    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            for (let k = 0; k < n; k++) {
                for (let l = 0; l < n; l++) {
                    for (let m = 0; m < n; m++) {
                        for (let n = 0; n < n; n++) {
                            for (let o = 0; o < n; o++) {
                                for (let p = 0; p < n; p++) {
                                    // do something
                                    someFunc(i, j, k, l, m, n, o, p);
                               }
                            }
                        }
                    }
                }
            }
        }
     }

     

     

     

    πŸ“ μž¬κ·€μ˜ ν™œμš©

     

    πŸ”—  μž¬κ·€μ μœΌλ‘œ μ‚¬κ³ ν•˜κΈ°

     

     

    1. μž¬κ·€ ν•¨μˆ˜μ˜ μž…λ ₯κ°’κ³Ό 좜λ ₯κ°’ μ •μ˜ν•˜κΈ°

     

    좔상적, λ˜λŠ” κ°€μž₯ λ‹¨μˆœν•˜κ²Œ μ •μ˜

    ν•¨μˆ˜μ˜ μž…μΆœλ ₯값을 μ •μ˜ -> μž¬κ·€ ν•¨μˆ˜λ₯Ό 톡해 λͺ©ν‘œ μ •μ˜

     

    2. 문제λ₯Ό μͺΌκ°œκ³  경우의 수λ₯Ό λ‚˜λˆ„κΈ°

     

    문제λ₯Ό μͺΌκ°€ 기쀀을 μ •ν•˜κ³ , μ •ν•œ 기쀀에 따라 문제λ₯Ό 더 큰 κ²½μš°μ™€ μž‘μ€ 경우둜 ꡬ뢄

    ꡬ뢄 기쀀은 "μž…λ ₯κ°’μ΄λ‚˜ 문제의 μˆœμ„œμ™€ 크기" 이닀

     

     

    3. λ‹¨μˆœν•œ 문제 ν•΄κ²°ν•˜κΈ°

     

    문제λ₯Ό μ—¬λŸ¬ 경우둜 κ΅¬λΆ„ν•œ λ‹€μŒ, κ°€μž₯ ν•΄κ²°ν•˜κΈ° μ‰¬μš΄ λ¬Έμ œλΆ€ν„° ν•΄κ²°

    πŸ‘‰πŸΌ  μž¬κ·€μ˜ 기초

    μž¬κ·€μ˜ κΈ°μ΄ˆλŠ” λ‚˜μ€‘μ— μž¬κ·€ ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•  λ•Œ, μž¬κ·€μ˜ νƒˆμΆœ 쑰건(μž¬κ·€ 호좜이 λ©ˆμΆ”λŠ” 쑰건)을 ꡬ성

    νƒˆμΆœ 쑰건이 μ—†λ‹€λ©΄? 끝없이 자기 μžμ‹ μ„ 호좜

     

     

    4. λ³΅μž‘ν•œ 문제 ν•΄κ²°ν•˜κΈ°

     

    λ‚¨μ•„μžˆλŠ” λ³΅μž‘ν•œ 경우λ₯Ό ν•΄κ²°

     

    5. μ½”λ“œ κ΅¬ν˜„

    λ°˜μ‘ν˜•

    'codeStates front-end > Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

    [자료ꡬ쑰] Tree, Graph  (0) 2023.03.15
    [자료ꡬ쑰] Stack, Queue  (0) 2023.03.14
    Daily Coding 10  (0) 2023.02.02
    Daily Coding 9  (0) 2023.01.30
    Daily Coding 8  (0) 2023.01.25

    λŒ“κΈ€

Designed by Tistory.