๐Ÿ“š ์ˆ˜ํ•™ ๊ธฐ๋ณธ ์ด๋ก 

์–ธ์ง€ยท2025๋…„ 4์›” 16์ผ

๐Ÿ“Š ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„

๐Ÿ“ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ ํ‰๊ฐ€ ์ง€ํ‘œ

  • ์ •ํ™•์„ฑ
  • ์ž‘์—…๋Ÿ‰
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
  • ์ตœ์กฑ์„ฑ
  • ํšจ์œจ์„ฑ
    • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ๊ณต๊ฐ„ ๋ณต์žก๋„

โฑ๏ธ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์ž…๋ ฅ ํฌ๊ธฐ์˜ ๊ฐ’์— ๋Œ€ํ•ด ๋‹จ์œ„ ์—ฐ์‚ฐ์„ ๋ช‡ ๋ฒˆ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜์—ฌ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • 3๊ฐ€์ง€ ์ ๊ทผ์  ํ‘œํ˜„๋ฒ”

    • O(๋น…์˜ค) : ์ตœ์•…์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ฑ๋Šฅ ์ธก์ •๊ฒฐ๊ณผํ‘œํ˜„

      function big_O(n){
          let sum = 0;
          sum = n *2;
          return sum;
      }
      3 -> O(1)
      
      function big_O(arr, n){
          let sum = 0;
          for(let i = 0 ; i < n; i++){
              sum+= arr[i];
          }
          return sum;
      }
      n+2 -> O(N)
      
      function big_O(arr, n){
          let sum = 0;
          for(let i = 0 ; i < n; i++){
              for(let j = 0; j < n ; j++){
                  sum+= arr[i][j];
              }
          }
          return sum;
      }
      nยฒ+2 -> O(Nยฒ)
      n์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ๋А๋ ค์ง„๋‹ค
      
      function big_O(arr, n){
          let sum = 0;
          for(let i = 0 ; i < n; i*=2){
              sum+=2
          }
          return sum;
      }
      n/2+2 -> O(logN)
    • ๋ณ‘ํ•ฉ ์ •๋ ฌ, ๋ถ„ํ•  ์ •๋ณตํ•  ๋•Œ logN์ด ๋งŽ์ด ๋‚˜์˜จ๋‹ค

    • logN ๋งŽ์œผ๋ฉด ๋งŽ์„ ์ˆ˜๋ก ํŠน์ • ์ด์ƒ ๊ฐ’์ด ์•ˆ์˜ฌ๋ผ๊ฐ„๋‹ค

    • N ๋ณด๋‹ค ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค.

    • ฮธ(์„ธํƒ€) : ํ‰๊ท ์ ์ธ ๊ฒฝ์šฐ์—์„œ์˜ ์„ฑ๋Šฅ ์ธก์ •๊ฒฐ๊ณผํ‘œํ˜„

    • ฮฉ(์˜ค๋ฉ”๊ฐ€) : ์ตœ์„ ์˜ ์ƒํ™ฉ์ผ ๋•Œ์˜ ์„ฑ๋Šฅ ์ธก์ •๊ฒฐ๊ณผํ‘œํ˜„


๐Ÿ”ข ๊ฒฝ์šฐ์˜ ์ˆ˜

  • ์–ด๋–ค ์‚ฌ๊ฑด ํ˜น์€ ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ๊ฐ€์ง“์ˆ˜๋ฅผ ์ˆ˜๋กœ ํ‘œํ˜„
  • ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํ‘ธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์ˆœ์—ด
    • ์กฐํ•ฉ
    • ์ค‘๋ณต ์ˆœ์—ด

๐Ÿ” ์ˆœ์—ด(Permutation)

์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ ์ค‘์—์„œ r๊ฐœ๋ฅผ ์ค‘๋ณต ์—†์ด ๊ณจ๋ผ ์ˆœ์„œ์— ์ƒ๊ด€ ์žˆ๊ฒŒ ๋‚˜์—ดํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜(nPr)

๐Ÿงฉ 3๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋‹จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜

let input = ["a", "b", "c"];
let count = 0;

// s: ์ง€๊ธˆ ๋ฐ”๊ฟ€ ์œ„์น˜(=๊ณ ์ •ํ•  ์ž๋ฆฌ), r : ๋งˆ์ง€๋ง‰ ๊ณ ์ •ํ•  ์ž๋ฆฌ (์—ฌ๊ธฐ์„  2 โ†’ 0~2๊นŒ์ง€ ์ด 3๊ฐœ ์ž๋ฆฌ ๊ณ ์ •)
function permutation(arr, s, r){
    // 1. ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋ฉˆ์ถฐ์•ผํ•  ์กฐ๊ฑด
    if(s == r){
        count++;
        console.log(arr.join(" "));
        return;
    }
    // 2. ์žฌ๊ท€๋ฅผ ๋Œ๋ณ€์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ๋  ๋ถ€๋ถ„/๋ฉ”์ธ๋กœ์ง
    for(let i = s; i < arr.length ; i++){
        [arr[s], arr[i]] = [arr[i], arr[s]]; // swap
        permutation(arr, s+1, r); // ์š”์†Œ ์„ ํƒ์‹œ ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ
        [arr[s], arr[i]] = [arr[i], arr[s]]; // swap ์›์ƒ๋ณต๊ตฌ
    }

    /**
     s  r
     0  2   i=0 ["a",]
     1  2   i=1 ["a","b", ]
     2  2   ["a","b","c"]
     ...
     1  2   i=2 ["a","c",]
     2  2   ["a","c","b"]
     1  2   i=2 ["a","b",]
     ...
     0  2   i=1 ["b","a","c"]
     ...
     0  2   i=0 ["c",]
     */
}

permutation(input, 0, 2);
console.log(count)

--------------------------------------------------
OUTPUT
a b c
a c b
b a c
b c a
c b a
c a b
6

๐Ÿค ์กฐํ•ฉ(Combination)

์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ์ค‘์—์„œ r๊ฐœ๋ฅผ ์ค‘๋ณต ์—†์ด ๊ณจ๋ผ ์ˆœ์„œ์— ์ƒ๊ด€ ์—†์ด ๋‚˜์—ดํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜(nCr)

๐Ÿƒ 4๊ฐœ์˜ ์ˆซ์ž ์นด๋“œ์—์„œ 2๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜

  • for๋ฌธ
let input = [1,2,3,4]; // 4C2
let count = 0;

function combination(arr){
    // for -> ๋ฝ‘๋Š” ๊ฐฏ์ˆ˜ ==> r ==> 2
    for(let i = 0; i < arr.length; i++){
        for(let j = i + 1; j<arr.length; j++){
            count++;
            console.log(arr[i],arr[j])
        }
    }
}

combination(input, 0, 2);
console.log(count)

--------------------------------------------------
OUTPUT
1 2
1 3
1 4
2 3
2 4
3 4
6
  • ์žฌ๊ท€ ํ•จ์ˆ˜
let input = [1,2,3,4]; // 4C2
let output = [];
let count = 0;

function combination(arr, data, s, idx, r){
    if(s == r){
        count++;
        console.log(data)
        return;
    }
    for(let i = idx; arr.length - i >= r - s ; i++){
        data[s] = arr[i]
        combination(arr, data, s + 1, i + 1, r)
    }
}

combination(input, output, 0, 0, 2);
console.log(count)

--------------------------------------------------
OUTPUT
[ 1, 2 ]
[ 1, 3 ]
[ 1, 4 ]
[ 2, 3 ]
[ 2, 4 ]
[ 3, 4 ]
6

๐Ÿงฎ ์ ํ™”์‹

์ ํ™”์‹(์žฌ๊ท€์‹)์ด๋ž€ ์ˆ˜์—ด์—์„œ ์ด์›ƒํ•˜๋Š” ๋‘๊ฐœ์˜ ํ•ญ ์‚ฌ์ด์— ์„ฑ๋ฆฝํ•˜๋Š” ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ด€๊ณ„์‹

  • ๋“ฑ์ฐจ์ˆ˜์—ด : F(n) = F(n-1)+a // a : ๊ณ ์ •๋œ ์ƒ์ˆ˜
//๋“ฑ์ฐจ ์ˆ˜์—ด - for ๋ฌธ
let result;

function forloop(s, t, number){
    let acc = 0;

    for(let i = 1; i <=number ; i++){
        if( i == 1) {
            acc += s;
        } else{
            acc += t;
        }
        console.log(i, acc)
    }
    return acc;
};

result = forloop(3, 2, 5)
console.log(result)

--------------------------------------------------
OUTPUT
1 3
2 5
3 7
4 9
5 11
11
--------------------------------------------------
--------------------------------------------------

//๋“ฑ์ฐจ ์ˆ˜์—ด - ์žฌ๊ท€ ํ•จ์ˆ˜
let result;

function recursive(s, t, number){
    // ๋ฉˆ์ถœ ์กฐ๊ฐ„
    if( number == 1){
        return s;
    }

    // ๋ฐ˜๋ณตํ•  ์ฝ”๋“œ
    return recursive(s, t, number-1) + t;
};

result = recursive(3, 2, 5)
console.log(result)

--------------------------------------------------
OUTPUT
11

number : 5 recursive(s, t, 4) + 2 => 9+2 => 11
number : 4 recursive(s, t, 3) + 2 => 7+2 => 9
number : 3 recursive(s, t, 2) + 2 => 5+2 => 7
number : 2 recursive(s, t, 1) + 2 => 3+2 => 5
number : 1 recursive(s, t, 1) + 2 => 3
  • ๋“ฑ๋น„์ˆ˜์—ด : F(n) = F(n-1)*a

    โ‡’ ๋“ฑ์ฐจ์ˆ˜์—ด ๊ณต์‹์—์„œ + โ†’ *๋กœ ๋ฐ”๊พธ๋ฉด๋œ๋‹ค.

  • ํŒฉํ† ๋ฆฌ์–ผ : F(n) = F(n-1)*n

    let reuslt;

    function recursive(number){
        if(number == 1){
            return number;
        }
        return recursive(number-1)*number;
    }

    reuslt = recursive(5);
    console.log(reuslt)

    --------------------------------------------------
    OUTPUT
    120
    5! = 5 X 4 X 3 X 2 X 1

    --------------------------------------------------
    --------------------------------------------------
    let reuslt;

    function recursive(number){
      let hap = 1;
      for( let i = 1 ; i <= number; i++){
        hap *= i;
      }
      return hap;
    }

    reuslt = recursive(5);
    console.log(reuslt)

    --------------------------------------------------
    OUTPUT
    120
  • ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด : F(n) = F(n-1)+F(n-2)

    let reuslt;
    
    function recursive(number){
      if(number == 1|| number == 0){
        return number;
      }
    
      return recursive(number - 1)+(number -2);
    }
    
    reuslt = recursive(5);
    console.log(reuslt)
    
      --------------------------------------------------
    OUTPUT
    5
    
    f(5) = f(4) + f(3) => 2 + 3 = 5
    f(4) = f(3) + f(2) => 1 + 2 = 3
    f(3) = f(2) + f(1) => 1 + 1 = 2
    f(2) = f(1) + f(0) => 1 + 0 = 1
    f(1) = 1
    f(0) = 0

0๊ฐœ์˜ ๋Œ“๊ธ€