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

Daehyunii's Dev-blog

01 ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•(Big O) ๋ณธ๋ฌธ

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

01 ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•(Big O)

Daehyunii 2022. 8. 1. 19:51

1.1 ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์˜ ํ•„์š”์„ฑ 

  ๋™์ผํ•œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋Š” ์ˆ˜๋งŽ์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋งŽ์€ ์ฝ”๋“œ๋“ค ์ค‘์—์„œ ์ƒํ™ฉ์— ์•Œ๋งž๋Š” ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์ข‹์€ ์ฝ”๋“œ๋Š” ๋ฌด์—‡์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค. ๋™์ผํ•œ ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์€ ๊ทธ ์ž‘์„ฑ ๋ฐฉ๋ฒ•๋งˆ๋‹ค ์žฅ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ๋น„๊ตํ•ด๋ณด๊ณ  ํ™•์ธํ•˜๋Š”๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋””๋ฒ„๊ทธ์‹œ ์ฝ”๋“œ๋ฅผ ๋Š๋ฆฌ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๋Š”๊ฒƒ๋„ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.

 

1.2 ์ฝ”๋“œ ์‹œ๊ฐ„ ์žฌ๊ธฐ

  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•จ์— ์žˆ์–ด์„œ ๋” ์ข‹์€ ์ฝ”๋“œ๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์€ ๋ฌด์—‡์ผ๊นŒ? ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ์ง€? ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š”์ง€? ์•„๋‹ˆ๋ฉด ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์ข‹์€ ์ฝ”๋“œ? ์ด ์ฒ˜๋Ÿผ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๊ธฐ์ค€์€ ๋งค์šฐ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์šฐ์„  ์†๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ํŒ๋ณ„ํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

//์ˆซ์ž 1๋ถ€ํ„ฐ ํŠน์ •ํ•œ n์ˆซ์ž ์‚ฌ์ด์— ์žˆ๋Š” ๋ชจ๋“  ์ˆซ์ž๋“ค์„ ๋”ํ•˜๋Š” ํ•จ์ˆ˜์ž‘์„ฑ

// 1๋ฒˆ ์˜ˆ์ œ
function addUpTo(n) {
  let total = 0;
  for (let i = 1; i <= n; i++) {
    total += i;
  }
  return total;
}
console.log(addUpTo(10));
//ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์•ฝ 1.2์ดˆ ๊ฑธ๋ฆผ

var t1 = performance.now();
addUpTo(1000000000);
var t2 = performance.now();
console.log(`Time Elapsed: ${(t2 - t1) / 1000} seconds.`)



//2๋ฒˆ ์˜ˆ์ œ
function addUpTo(n) {
  return n * (n + 1) / 2;
}
//ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์•ฝ 0.0001์ดˆ ๊ฑธ๋ฆผ
var time1 = performance.now();
addUpTo(1000000000);
var time2 = performance.now();
console.log(`Time Elapsed: ${(time2 - time1) / 1000} seconds.`)

//ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋‚˜ ํ•˜๋‚˜ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋ฉ”์„œ๋“œ๋กœ ํ™•์ธํ•˜๋Š”๊ฒƒ์€ ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ธ ์ผ์ž„

  ์œ„ ์˜ˆ์ œ 1๋ฒˆ ์ฝ”๋“œ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ–ˆ๊ณ , ์˜ˆ์ œ 2๋ฒˆ์€ ์ˆ˜ํ•™ ๊ณต์‹์„ ์‚ฌ์šฉํ•ด์„œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ ํ›„, ์ฒ˜๋ฆฌ๋˜๋Š” ์‹œ๊ฐ„์„ ํ•จ์ˆ˜๋ณ„๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋น„๊ตํ•ด ๋ณธ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•œ ํ•จ์ˆ˜๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š๋ƒ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋ฌผ๋ก  2๋ฒˆ ์˜ˆ์ œ๊ฐ€ ๋” ๋น ๋ฅด๊ณ  ๊ฒฐ๊ตญ ๋น ๋ฅด๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ณธ๋‹ค๋ฉด ์ข‹์€ ์ฝ”๋“œ์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ์น˜๋งŒ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ๊ฒƒ์€ ์œ„์˜ ์ฝ”๋“œ๋“ค์ฒ˜๋Ÿผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฉ”์„œ๋“œ๋“ค์„ ํ†ตํ•ด์„œ ๋น„๊ตํ•˜๋Š”๊ฒƒ์€ ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๊ทน๋‹จ์ ์ด์ง€๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ 1์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ฝ”๋“œ์™€ 4์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ฝ”๋“œ ์ค‘ ๋ˆ„๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ๋งŽ์ด๋“ค๊ณ , ๋ฐ˜๋Œ€๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋นจ๋ผ ๋น„๊ต๊ฐ€ ํž˜๋“  ๊ฒฝ์šฐ๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๋˜ ์ปดํ“จํ„ฐ ์„ฑ๋Šฅ๋ณ„๋กœ๋„ ์ฐจ์ด ๋“ฑ ๋งŽ์€ ๋ณ€์ˆ˜๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒํ™ฉ์— ์ ํ•ฉํ•œ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ํŒ๋ณ„ํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒƒ์ด๋‹ค.

 

1.3 ์—ฐ์‚ฐ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ

  ๋ฐ”๋กœ ์œ„์—์„œ ์‚ดํŽด๋ณธ๋ฐ”์™€ ๊ฐ™์ด ์‹œ๊ฐ„์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•˜๋Š”๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. '๊ทธ๋ ‡๋‹ค๋ฉด ๋ญ๊ฐ€ ์ข‹์„๊นŒ?' ๋ฐ”๋กœ ์—ฐ์‚ฐ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

//1๋ฒˆ ์˜ˆ์ œ
function addUpTo(n) {
    return n * (n + 1) / 2;
}




//2๋ฒˆ ์˜ˆ์ œ
function addUpTo(n) {
    let total = 0;
    for (let i = 1; i <= n; i++) {
    total += i;
    }
    return total;
}

 ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•ด ๋ณด์ž. 1๋ฒˆ ์˜ˆ์ œ ํ•จ์ˆ˜์˜ ์—ฐ์‚ฐ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•ด ๋ณด๋ฉด ๊ณฑํ•˜๊ธฐ, ๋”ํ•˜๊ธฐ ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์ž๋ฅผ ๊ฐ–๊ณ  ์ด 3๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ˆ์ œ 2๋ฒˆ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด 5n+2๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ์ด๋ค„์ง„๋‹ค. (n๋ฒˆ์˜ + ์—ฐ์‚ฐ, n๋ฒˆ์˜ ํ• ๋‹น, n๋ฒˆ์˜ ์ฆ๊ฐ ๋“ฑ) ๋˜ ์ด์™€๊ฐ™์ด ๋ชจ๋“  ์—ฐ์‚ฐ์„ ํ•˜๋‚˜ ํ•˜๋‚˜ ์นด์šดํŠธํ•ด์„œ ๋น„๊ตํ•˜๋Š”๊ฒƒ๋„ ๊ต‰์žฅํžˆ ์–ด๋ ค์šด ์ผ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์ธ ์ถ”์„ธ๋ฅผ ๋ณด๋Š”๊ฒƒ์ด ๊ต‰์žฅํžˆ ์ค‘์š”ํ•˜๋‹ค. ์ „์ฒด์ ์ธ ์ถ”์„ธ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค.

 

1.4 ์‹œ๊ฐ„ ๋ณต์žก๋„ ์‹œ๊ฐํ™” ํ•˜๊ธฐ

  ๋‹ค์Œ์€ ํ˜„์žฌ ๊ณต๋ถ€ํ•˜๊ณ ์žˆ๋Š” ํ•ด๋‹น ๊ฐ•์˜์˜ ๊ฐ•์‚ฌ๋‹˜์ด ๋งŒ๋“ค์–ด ๋†“์€ n๊ฐ’์„ ํ•จ์ˆ˜์— ํ• ๋‹น ํ–ˆ์„๋•Œ์˜ ์—ฐ์‚ฐ๋˜๋Š” ์‹œ๊ฐ„์„ ์‹œ๊ฐํ•ด ๋†“์€ ํŽ˜์ด์ง€๋‹ค.

https://rithmschool.github.io/function-timer-demo/

 

Big O Introduction

โŒ˜ + click on a point to remove it; shift + click to remove all data for that function.

rithmschool.github.io

  ํ•ด๋‹น ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€์„œ ํ•จ์ˆ˜ ๋ณ„๋กœ n๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„๋•Œ์˜ ์—ฐ์‚ฐ ์‹œ๊ฐ„์„ ํ™•์ธํ•ด ๋ณผ ์ˆ˜์žˆ๋‹ค.  
์‹œ๊ฐ„ ๋ณต์žก๋„ ์‹œ๊ฐํ™”

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

function addUpTo(n) {
    return n * (n + 1) / 2;
}

  ์œ„ ์ฝ”๋“œ์˜ n์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ๋„ ์—ฐ์‚ฐํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜๋Š” 3๋ฒˆ์œผ๋กœ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ๋˜๋Š” ์‹œ๊ฐ„์€ ๋™์ผํ•˜๋‹ค.(์•ฝ 0.0002์ดˆ) ์ด๋ฅผ ์ƒ์ˆ˜๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋ฉฐ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ๋Š” O(1)์ด๋ผ ํ‘œํ˜„ํ•œ๋‹ค.(์œ„ ๊ทธ๋ž˜ํ”„์˜ ํŒŒ๋ž€์ƒ‰ ์ถ”์„ธ์„ ์ด๋‹ค.)

function addUpToFirst(n) {
    var total = 0;
    for (var i = 0; i <= n; i++) {
        total += i;
    }
    return total;
}

  ์œ„ ์ฝ”๋“œ์˜ n์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์—ฐ์‚ฐํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜๋„ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜๋ฆฌ๋˜๋Š” ์‹œ๊ฐ„๋„ ๋น„๋ก€ํ•ด์„œ ๊ฐ™์ด ๋Š˜์–ด๋‚œ๋‹ค. ์ด๋ฅผ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ๋Š” O(N)์ด๋ผ ํ‘œํ˜„ํ•œ๋‹ค.(์œ„ ๊ทธ๋ž˜ํ”„์˜ ์ดˆ๋ก์ƒ‰ ์ถ”์„ธ์„ ์ด๋‹ค.)

function countUpAndDown(n) {
    console.log("Going up!");
    for (var i = 0; i < n; i++) {
        console.log(i);
     } //O(N)
    console.log("At the top!\nGoing down...");
    for (var j = n - 1; j >= 0; j--) {
        console.log(j);
    } //O(N)    ---> ๊ทธ๋ ‡๋‹ค๊ณ  O(2N)์ด๋ผ ํ•˜์ง€ ์•Š์Œ
    console.log("Back down. Bye!");
}

  ํ•œ ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ N(์—ฐ์‚ฐ ํšŸ์ˆ˜)์ด 2N์ด๋“  5N์ด๋“  O(N)์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค. ์•ž์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์€ ์ „๋ฐ˜์ ์ธ ์ถ”์„ธ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๊ทธ๋ž˜ํ”„๋กœ ํ™•์ธํ–ˆ๋“ฏ์ด ๋ณ€ํ•จ์ด ์ƒ๊ธฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ˆ˜ํ•™์ ์œผ๋กœ๋„ n์˜ ๊ฐ’์— 1์–ต์„ ๋„ฃ๋”๋ผ๋„, ์ถ”์„ธ์„ ์€ ๋ณ€ํ•จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ O(N)์ด๋ผ ํ‘œํ˜„ํ•œ๋‹ค.

function printAllPairs(n) {
    for (var i = 0; i < n; i++) {
        for (var j = 0; j < n; j++) {
        console.log(i, j);
        }
    }
}

 

  ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์˜ ๊ฒฝ์šฐ์—๋Š” O(N)์•ˆ์—์„œ ๋˜ O(N)์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(N^2)์ด๋ผ ํ‘œํ˜„ํ•œ๋‹ค. (์œ„ ๊ทธ๋ž˜ํ”„์˜ ๋นจ๊ฐ„์ƒ‰ ์ถ”์„ธ์„ ์ด๋‹ค.)

 

1.6 ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ• ๋‹จ์ˆœํ™”

  ๋‹ค์Œ์œผ๋กœ๋Š” ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์„ ๋‹จ์ˆœํ™”ํ•œ ์˜ˆ์‹œ๋“ค์„ ์‚ดํŽด๋ณด์ž.

 

1. O(2N) --> O(N)

2. O(500) --> O(1)

3. O(13N์ œ๊ณฑ) --> O(N์ œ๊ณฑ)

4. O(N + 10) --> O(N)

5. O(1000N + 50) --> O(N)

6. O(N์ œ๊ณฑ + 5N + 8) --> O(N์ œ๊ณฑ)

 

  ์œ„์˜ ์˜ˆ์ œ๋“ค์ฒ˜๋Ÿผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ์ถ”์„ธ์„ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์€ ์ถ”์„ธ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฐ์‚ฐํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๋ฌดํ•œ๋Œ€๋กœ ์ฆ๊ฐ€ํ–ˆ์„๋•Œ๋„ ์ถ”์„ธ์„ ์—๋Š” ๋ณ€ํ•จ์ด ์—†์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

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

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

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

  ์œ„ ์ฝ”๋“œ์—์„œ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์€ total๊ณผ i๋ณ€์ˆ˜๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ arr์— ์–ด๋–ค ๊ฐ’์ด ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด๋„ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์€ ๊ณ„์†ํ•ด์„œ ์ผ์ •ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜ total๊ณผ i์˜ ๊ณต๊ฐ„์€ ๊ณ„์† ์ƒ์ˆ˜๋กœ ์กด์žฌํ•œ๋‹ค. ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ๋Š” O(1)๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

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

   ์œ„ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜ arr์— ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐ’์ด ํฌ๋ฉด ํด์ˆ˜๋ก ๋ณ€์ˆ˜ newArr์˜ ๊ณต๊ฐ„์ด ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์ปค์ง„๋‹ค. ์ฆ‰ ๋น„๋ก€ํ•˜์—ฌ ์ฆ๊ฐ€ํ•œ๋‹ค. ์ด๋ฅผ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ๋Š” O(N)์ด๋ผ ํ‘œํ˜„ํ•œ๋‹ค.

 

<๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•> ์‹œ๊ฐ„ ๋ณต์žก๋„