๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

05 ์žฌ๊ท€ ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/Algorithm & Data structure

05 ์žฌ๊ท€

Daehyunii 2022. 8. 4. 23:18

5.1 ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  ์šฐ์„  ์žฌ๊ท€๋ผ๋Š”๊ฒƒ์ด ๋ฌด์—‡์ผ๊นŒ? ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๊ณต๋ถ€ํ–ˆ๋“ฏ์ด ์žฌ๊ท€๋Š” ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์žฌ๊ท€๋ฅผ ์™œ ์•Œ์•„์•ผ ํ• ๊นŒ? ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ ๋ชจ๋“  ๊ณณ์—์„œ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์šฐ์„  ์žฌ๊ท€๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” '์‹คํ–‰์ปจํ…์ŠคํŠธ ์Šคํƒ'์„ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ด๋ฏธ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ณต๋ถ€ํ•œ์ ์ด ์žˆ๋‹ค. 

2022.07.20 - [์–ธ์–ด ๊ณต๋ถ€ ๋ฐ ์ •๋ฆฌ/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ[๋ชจ๋˜์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ]] - 23์žฅ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ

 

23์žฅ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ

์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ•ต์‹ฌ ๊ฐœ๋…์ด๋‹ค. ์ด ๊ฐœ๋…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์Šค์ฝ”ํ”„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹๋ณ„์ž์™€ ์‹๋ณ„์ž์— ๋ฐ”์ธ๋”ฉ๋œ ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ํ˜ธ

pinetree93.tistory.com

  ๊ฐ„๋‹จํžˆ ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ณด์ž๋ฉด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ์— ์žˆ์–ด ์ผ์˜ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํˆด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

  ์šฐ์„  ์žฌ๊ท€๋Š” ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์„ ๊ผญ ์ง€์ผœ์„œ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์กฐ๊ฑด์€ ๋ฐ˜๋“œ์‹œ ์ข…๋ฃŒ ์กฐ๊ฑด์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‘ ๋ฒˆ์งธ ์กฐ๊ฑด์€ ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ณ€ํ™”๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋˜‘๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ๋ฌดํ•œ ๋ฐ˜๋ณต๋˜์–ด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ ์นด์šดํŠธ ๋‹ค์šด์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž! 

// ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ž‘์„ฑํ•œ ์นด์šดํŠธ ๋‹ค์šด
function countDown(num){
    for(var i = num; i > 0; i--){
        console.log(i);
    }
}



// ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•œ ์นด์šดํŠธ ๋‹ค์šด
function countDown(num){
    if(num <= 0) {
        return;
    }
    console.log(num);
    num--;
    countDown(num);
}
countDown(3)

  ์ด๋ฒˆ์—๋Š” ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์„ค๋ช…ํ• ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•˜๋Š” ํŒฉํ† ๋ฆฌ์–ผ์„ ์ž‘์„ฑํ•ด ๋ณด์ž. ํŒฉํ† ๋ฆฌ์–ผ์€ 1๋ถ€ํ„ฐ ์ฃผ์–ด์ง„ ์ •์ˆ˜๊นŒ์ง€ ๋ชจ๋‘ ๊ณฑํ•˜๋Š”๊ฒƒ์„ ๋งํ•œ๋‹ค.

 //for ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ•˜๊ธฐ
function factorialll(num){
    let facNum = 1;
    for(let i = num ; i > 0 ; i--){
        facNum *= i;
    }
    return facNum;
}

console.log(factorialll(5));


//while ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ•˜๊ธฐ
function fff(num){
    if(num <= 0) return 1

    let res = num;
    while(--num) res *= num;
    return res;
}

console.log(fff(5));


//์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ•˜๊ธฐ
function factorial(n){
    if(n <= 0)return 1;
    return n * factorial(n-1);
}

console.log(factorial(3));

  ์œ„์™€ ๊ฐ™์ด ์žฌ๊ท€ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ๋งค์šฐ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

  ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ• ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์„ ์‚ดํŽด๋ณด์ž๋ฉด ์žฌ๊ท€ํ•จ์ˆ˜์—์„œ ์ข…๋ฃŒ ์กฐ๊ฑด์ด ์—†๊ฑฐ๋‚˜ ์ž˜๋ชป๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์•ž์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ ธ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ข…๋ฃŒ์กฐ๊ฑด์„ ๋ฐ˜๋“œ์‹œ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•˜๊ณ , ๋ฐ˜ํ™˜์„ ์žŠ๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋ฐ˜ํ™˜์„ ํ•ด๋„ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ผญ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•œ๋‹ค!!

 

5.2 ํ—ฌํผ ๋ฉ”์„œ๋“œ ์žฌ๊ท€

  ํ—ฌํผ ๋ฉ”์„œ๋“œ ์žฌ๊ท€๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ์ค‘์ฒฉ ํ•จ์ˆ˜๊ฐ€ ์žฌ๊ท€ํ•จ์ˆ˜์ธ ๊ฒฝ์šฐ, ํ—ฌํผ ๋ฉ”์„œ๋“œ ์žฌ๊ท€๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ๋‚ด๋ถ€ํ•จ์ˆ˜ ์ฆ‰, ์ค‘์ฒฉํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋Š ๋ฐฐ์—ด์—์„œ ๋ชจ๋“  ํ™€์ˆ˜๊ฐ’์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํ—ฌํผ ๋ฉ”์„œ๋“œ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์•„์ฃผ ์ข‹์€ ์ „๋žต์ด์ž ์ ‘๊ทผ๋ฒ•์ด๋‹ค. ํ—ฌํผ ๋ฉ”์„œ๋“œ ์žฌ๊ท€๋Š” ์ผ์ข…์˜ ๊ฒฐ๊ณผ๋ฅผ ์ปดํŒŒ์ผํ•  ๋•Œ ํ”ํžˆ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด์ด๋‹ค. ๋ณดํ†ต ๋ฐฐ์—ด์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฐ˜๋ณต๋ฌธ๋ณด๋‹ค ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•˜๋Š”๊ฒƒ์ด ์กฐ๊ธˆ ๋” ๋ณต์žกํ•œ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ๋‹ค.

function oddValues(array){

    let result = []

    function helper(input){
        if(input.length === 0) {
            return;
        }

        if(input[0] % 2 !== 0){
            result.push(input[0])
        }

        helper(input.slice(1))
    }

    helper(array)

    return result;

}
console.log(oddValues([1,2,3,4,5,6])); // [1,3,5]

5.3 ์ˆœ์ˆ˜ ์žฌ๊ท€

  ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ˆœ์ˆ˜ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด์„œ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ result๋ฐฐ์—ด์€ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ๋งˆ๋‹ค ๋นˆ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

function oddValues(array){
    let result = [];

    if(array.length === 0) {
        return result;
    }

    if(array[0] % 2 !== 0){
        result.push(array[0]);
    }

    result = result.concat(oddValues(array.slice(1)));
    return result;
}

oddValues([1,2,3,4,5]) 

//slice(1)  << ๋ฐฐ์—ด์˜ 1๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋ฐ˜ํ™˜
//concat() << ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ฐ’๋“ค์„ ์›๋ณธ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋กœ ์ถ”๊ฐ€ํ•œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜
//์ฆ‰, result[1] -> result[3] -> result[5] -> ๋ฐ˜ํ™˜๊ฐ’[5] -> ๋ฐ˜ํ™˜๊ฐ’[3,5] -> ๋ฐ˜ํ™˜๊ฐ’[1,3,5]