5. Big O์˜ ๊ณต๊ฐ„ ๋ณต์žก์„ฑ

์œ„์˜ ํŽ˜์ด์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ฅธ ์‹คํ–‰ ์†๋„ ์ฆ‰, ๋Ÿฐํƒ€์ž„๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋น„๊ตํ•˜์˜€๊ณ  ์ด๋ฅผ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ผ๊ณ  ํ•œ๋‹ค. ์ž…๋ ฅ์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋Ÿฐํƒ€์ž„์„ ๋ถ„์„ํ•œ ๊ฒƒ์ด๋‹ค.

์ด๋ฒˆ์— ๋ฐฐ์šธ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ๋ฐ”๋กœ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์— ๋”ฐ๋ฅธ ๋ถ„์„์„ ๋งํ•œ๋‹ค.

์ฆ‰, ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘๊ณผ ๊ด€๋ จ๋œ ๋น„๊ต์ด๋‹ค.

JavaScript ์—์„œ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ทœ์น™์ด ์กด์žฌํ•œ๋‹ค.

JS์—์„œ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„ ๊ทœ์น™

  1. ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ํƒ€์ž… (boolean, number, undefined, null) ์€ ์ผ์ •ํ•œ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค.

์ฆ‰, ์ž…๋ ฅ์˜ ํฌ๊ธฐ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ 1 ์ด๊ฑด 1000 ์ด๊ฑด ์ผ์ •ํ•œ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  1. String ํƒ€์ž…์€ O(n) ์˜ ํ‘œ๊ธฐ๋ฒ•์„ ์ง€๋‹Œ๋‹ค. ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ n ์ด ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ.
  2. ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ฆ‰, array ํƒ€์ž…๊ณผ object ํƒ€์ž…์€ ์ผ๋ฐ˜์ ์œผ๋กœ O(n) ์ด๋‹ค.
    ์—ฌ๊ธฐ์„œ์˜ n ์€ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋‚˜ ํ‚ค ๊ฐ’์˜ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ์ œ๋ฅผ ํ†ตํ•œ ๋น„๊ต

// function sumA
function sumA(arr) {
    let total = 0;
    for (let i = 0; i < arr.length; i++) {
        total += arr[i];
    }
    return total;
}

์‹œ๊ฐ„ ๋ณต์žก๋„

์‹œ๊ฐ„๋ณต์žก๋„์˜ ๊ด€์ ์—์„œ ๋ดค์„ ๋•Œ, for ๋ฌธ์œผ๋กœ ์ธํ•œ ๋ฃจํ”„ ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น for๋ฌธ์€ ์ž…๋ ฅ๊ฐ’์ธ arr ์˜ ๊ธธ์ด(n)์— ๋”ฐ๋ผ ๋ณ€ํ™”ํ•˜๋ฏ€๋กœ O(n) ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณต๊ฐ„ ๋ณต์žก๋„

๊ณต๊ฐ„๋ณต์žก๋„์˜ ์ดˆ์ ์—์„œ ๊ณต๊ฐ„(๋ฉ”๋ชจ๋ฆฌ)๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์˜์–ต์€ ์–ด๋””๊ฐ€ ํ•ด๋‹น๋˜๋Š” ๊ฒƒ์ธ๊ฐ€๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

  1. ๋จผ์ €, sumA() ๋Š” total = 0 ์—์„œ ๋ณ€์ˆ˜ total์— ์ƒ์ˆ˜ 0์„ ํ• ๋‹นํ•œ๋‹ค.(๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค.)
  2. ๋‘๋ฒˆ์งธ๋กœ for๋ฌธ ๋‚ด์— let i = 0 ์—์„œ ๋ณ€์ˆ˜ i์— ์ƒ์ˆ˜ 0์„ ํ• ๋‹นํ•œ๋‹ค.(๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค.)

์ž…๋ ฅ์ธ arr ์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒ ์œผ๋‚˜ sumA() ํ•จ์ˆ˜ ๋‚ด์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์ฐจ์ง€ํ•˜๊ฒŒ ๋˜๋Š” ์˜์—ญ์€ 2๊ฐ€์ง€์— ๋ถˆ๊ณผํ•˜๋ฉฐ return ๋˜๋Š” ๊ฐ’ total์€ ๊ฒฐ๊ตญ ์ƒ์ˆ˜(number) ์ด๋‹ค.

JS์—์„œ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„ ๊ทœ์น™์—์„œ ๋ณด์•˜๋“ฏ number ์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” ์ผ์ •ํ•˜๋‹ค. ์ฆ‰ O(n) ์ด๋‹ค.

๋‹ค๋ฅธ ํ•จ์ˆ˜ sumB()๋ฅผ ์‚ดํŽด๋ณด์ž.

// function sumB
function sumB(arr) {
    let newArr = [];
    for (let i = 0; i < arr.length; i++) {
        newArr.push(2*arr[i]);
    }
    return newArr;
}

์‹œ๊ฐ„ ๋ณต์žก๋„

์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ๊ด€์ ์—์„œ ์ž…๋ ฅ๋˜๋Š” ๊ฐ’ arr์˜ ๊ธธ์ด์— ๋”ฐ๋ผ for ๋ฌธ์˜ ๋ฃจํ”„ ๊ธธ์ด๊ฐ€ ๋ณ€ํ™”๊ฒŒ ๋˜๊ณ  ์ด๋Š” ๊ณง O(n) ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ณต๊ฐ„ ๋ณต์žก๋„

sumA() ํ•จ์ˆ˜์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„์™€ ๋™์ผํ•˜๊ฒŒ ๊ณต๊ฐ„(๋ฉ”๋ชจ๋ฆฌ)์„ ์ฐจ์ง€ํ•˜๋Š” ์˜์—ญ์„ ์‚ดํŽด๋ณธ๋‹ค.

  1. let newArr = []; ์—์„œ ๋ฐฐ์—ด์ด ๋ณ€์ˆ˜ newArr ์— ํ• ๋‹น๋œ๋‹ค.
  2. for ๋ฌธ ๋‚ด์—์„œ let i = 0; ์œผ๋กœ ๋ณ€์ˆ˜ i์— 0์ด ํ• ๋‹น๋œ๋‹ค.
  3. for ๋ฌธ ๋‚ด์—์„œ ๋ณ€์ˆ˜ newArr ์ด ์ž…๋ ฅ ๊ฐ’์ธ arr ์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ๋น„๋ก€ํ•˜์—ฌ ๋ฐ˜๋ณต์‹คํ–‰๋˜๋ฉฐ newArr์— push ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง„๋‹ค.

1.~2.๋ฅผ ํ†ตํ•ด์„œ +2๊ฐ€ ๋˜๋ฉฐ, 3. ์—์„œ ์ž…๋ ฅ ๊ฐ’์ธ ๋ฐฐ์—ด arr์˜ ๊ธธ์ด์— ๋”ฐ๋ผ newArr์˜ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๊ฐ€ ๋น„๋ก€ํ•˜์—ฌ ๋ณ€ํ™”ํ•˜๋Š” ๊ฒƒ์— ๋”ฐ๋ผ, n+2 ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ๋น…์˜ค ํ‘œํ˜„์‹์˜ ๋‹จ์ˆœํ™”์— ๋”ฐ๋ผ O(n) ์ด๋‹ค.