15. ์บํ„ฐํ•„๋Ÿฌ ๋ฐฉ๋ฒ• (Caterpillar Method) Codility Lesson ํ•œ๊ตญ์–ด ์ •๋ฆฌ๋ณธ (JavaScript ver.)

    1. ์บํ„ฐํ•„๋Ÿฌ ๋ฐฉ๋ฒ•์ด๋ž€?

    ์บํ„ฐํ•„๋Ÿฌ ๋ฐฉ๋ฒ•์€ ์—ฐ์†๋œ ๋ถ€๋ถ„ ๋ฐฐ์—ด(์Šฌ๋ผ์ด์Šค)์—์„œ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ• ์ด๋‹ค. ๋ณดํ†ต O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.


    2. O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ์บํ„ฐํ•„๋Ÿฌ ๋ฐฉ๋ฒ•

    JavaScript ์ฝ”๋“œ:

    function caterpillarMethod(A, s) {
        let n = A.length, front = 0, sum = 0;
        for (let back = 0; back < n; back++) {
            while (front < n && sum + A[front] <= s) {
                sum += A[front];
                front++;
            }
            if (sum === s) return true;
            sum -= A[back];
        }
        return false;
    }

    ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.


    3. ์บํ„ฐํ•„๋Ÿฌ ๋ฐฉ๋ฒ•์˜ ํ™œ์šฉ

    ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค:

    • ์—ฐ์† ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํ•ฉ ์ฐพ๊ธฐ (์˜ˆ: ์—ฐ์†๋œ ์ˆซ์ž์˜ ํ•ฉ์ด ํŠน์ • ๊ฐ’ s๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ ์ฐพ๊ธฐ)
    • ์—ฐ์†๋œ ์›์†Œ๋“ค์˜ ๊ณฑ ์ฐพ๊ธฐ (์˜ˆ: ์ตœ๋Œ€ ์—ฐ์† ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ๊ณฑ)
    • ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ตœ์žฅ ๋ถ€๋ถ„ ๋ฐฐ์—ด ์ฐพ๊ธฐ

    ์บํ„ฐํ•„๋Ÿฌ ๋ฐฉ๋ฒ•์€ ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ์™€ ์œ ์‚ฌํ•˜๋ฉฐ, ์—ฐ์†๋œ ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ํšจ๊ณผ์ ์œผ๋กœ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€