πŸ§‘‍πŸ’» Web/JavaScript

[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ λ°°μ—΄ μ‹œκ°„ λ³΅μž‘λ„

Lennon 2022. 1. 28. 12:15
728x90
λ°˜μ‘ν˜•

μžλ°”μŠ€ν¬λ¦½νŠΈ λ°°μ—΄ λ©”μ„œλ“œμ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ•Œμ•„λ³΄μž.

 

μ‹œκ°„ λ³΅μž‘λ„λ₯Ό ν‘œκΈ°ν•  땐 λŒ€μ²΄λ‘œ λΉ…μ˜€ ν‘œκΈ°λ²•μœΌλ‘œ μ‚¬μš©ν•œλ‹€.

λΉ…μ˜€ ν‘œκΈ°λ²•μ— λŒ€ν•΄ κ°„λ‹¨ν•˜κ²Œ μ„€λͺ…ν•˜μžλ©΄

 

O(1)

μƒμˆ˜ μ‹œκ°„ λ³΅μž‘λ„μ΄λ‹€. 

function twoUp(num) {
  return num+num;
}

num에 μ–΄λ–€ μˆ˜κ°€ 듀어와도 + ν•œλ²ˆμ˜ 연산을 μ‹œλ„ν•œλ‹€. 연산이 μ—¬λŸ¬ 번 μ‹œν–‰λ˜λ„ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(1)둜 λ™μΌν•˜λ‹€.

λ¬΄ν•œλŒ€λ₯Ό κΈ°μ€€μœΌλ‘œ 봀을 λ•Œ κ·Έλž˜ν”„ ν˜•μ‹μ€ λΉ„μŠ·ν•˜κΈ° λ•Œλ¬Έμ— λ™μΌν•˜κ²Œ ν‘œκΈ°ν•˜λŠ” κ±Έ κ·œμΉ™μœΌλ‘œ ν•œλ‹€.

function upupup(num) {
  return num+num+num+num+num+num+num+num+num+num+num+num+num+num+num;
}

O(logN)

logN만큼의 μ‹œκ°„ λ³΅μž‘λ„μ΄λ‹€. κ°„λ‹¨ν•œ 예둜 2개의 μžμ‹λ…Έλ“œλ₯Ό κ°€μ§€λŠ” μ΄μ§„νŠΈλ¦¬λ₯Ό μ΄μš©ν•΄ 8개의 λ…Έλ“œμ€‘ μ›ν•˜λŠ” κ°’μ˜ λ…Έλ“œλ₯Ό μ°ΎλŠ”λ‹€κ³  μƒκ°ν•΄λ³΄μž. 그럼 2개의 μžμ‹λ…Έλ“œλ‘œ 인해 8 => 4 => 2 => 1 μˆœμ„œλ‘œ 찾을 수 μžˆμ„ 것이닀. μ΄λŠ” λ‚˜μ€‘μ— λ”°λ‘œ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

O(N)

n만큼의 μ‹œκ°„ λ³΅μž‘λ„μ΄λ‹€. κ°„λ‹¨ν•˜κ²Œ for문을 μƒκ°ν•˜λ©΄ λœλ‹€.

function count(num) {
  let count = 0;
  for(let i = 1; i <= num; i++){
    if(i%2 === 1) {
      count += 1;
    }
  }
  return count;
}

O(1)κ³Ό λ‹€λ₯΄κ²Œ num이 10,000이라면 10,000번 μˆœνšŒν•˜κ³ , 1,000,000이라면 1,000,000번 μˆœνšŒν•œλ‹€. 즉 num만큼 μˆœνšŒν•˜λ―€λ‘œ O(n)으둜 ν‘œκΈ°ν•  수 μžˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ 4개의 for문이 μžˆμ–΄λ„ O(4n)이 μ•„λ‹ˆλΌ κ·Έλƒ₯ O(n)으둜 ν‘œκΈ°ν•œλ‹€.

 

O(NlogN)

N*logN만큼의 μ‹œκ°„ λ³΅μž‘λ„, λ°‘μ—μ„œ μ •λ ¬ νŒŒνŠΈμ—μ„œ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.

 

O(N^2)

n^2만큼의 μ‹œκ°„ λ³΅μž‘λ„ λŒ€ν‘œμ μœΌλ‘œ 2쀑 for문이 μžˆλ‹€.

function matrix(num) {
  const mat = [];
  for(let i = 0; i < num; i++){
    const row = [];
    for(let j = 0; j < num; j++) {
      row.push([i,j]);
    }
    mat.push(row);
  }
}

μœ„ μ½”λ“œμ—μ„œ num이 1000이라 μƒκ°ν•΄λ³΄μž, 얼핏 봐도 1,000,000번 μ‹€ν–‰λœλ‹€λŠ” κ±Έ μ•Œ 수 μžˆλ‹€. λ‹€λ₯Έ λ³΅μž‘λ„μ— λΉ„ν•΄ λ§Žμ€ μ‹œκ°„μ΄ κ±Έλ¦¬λ―€λ‘œ

μˆ˜ν•™μ  곡식 등을 ν™œμš©ν•΄ 효율적으둜 μ‚¬μš©ν•˜λŠ” 게 μ’‹λ‹€.


λ°°μ—΄μ—μ„œμ˜ μ‹œκ°„ λ³΅μž‘λ„

μš°μ„  λ°°μ—΄μ—μ„œ μš°λ¦¬κ°€ 자주 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜ 및 λ©”μ„œλ“œλ“€μ„ μ‚΄νŽ΄λ³΄μž.

push λ°°μ—΄μ˜ 맨 끝에 값을 μ‚½μž…ν•œλ‹€.
pop λ°°μ—΄μ˜ 맨 끝의 값을 μ‚­μ œν•œλ‹€.
shift λ°°μ—΄μ˜ 맨 μ•žμ— 값을 μ‚½μž…ν•œλ‹€.
unshift λ°°μ—΄μ˜ 맨 μ•žμ˜ 값을 μ‚­μ œν•œλ‹€.
concat 배열을 이어쀀닀.
slice 배열을 지정해놓은 μ˜μ—­λΆ€λΆ„μœΌλ‘œ 자λ₯Έλ‹€.
splice 배열에 지정해놓은 μΈλ±μŠ€μ— 값듀을 μΆ”κ°€ν•˜κ±°λ‚˜, 자λ₯Έλ‹€.
sort 배열을 μ •λ ¬ν•œλ‹€.
forEach, map, filter, reduce 배열에 μ‚¬μš©ν•˜λŠ” μ£Ό λ©”μ„œλ“œ λ“€

 

push, pop : O(1) 

배열은 μš°λ¦¬κ°€ μ•Œλ‹€μ‹œν”Ό 인덱슀λ₯Ό 가진닀. 첫 μ‹œμž‘μ€ 0, 끝의 인덱슀 값은 λ°°μ—΄μ˜ 길이 -1이닀. push, pop은 λ°°μ—΄μ˜ 맨 끝에 값을 μΆ”κ°€ 및 μ‚­μ œ ν•˜λ―€λ‘œ 인덱슀 ν•˜λ‚˜λ§Œ μ§€μ •ν•΄μ£Όκ±°λ‚˜ μ‚­μ œν•˜λ©΄ λœλ‹€. μ‹œκ°„ λ³΅μž‘λ„λŠ” O(1) 이닀.

 

shift, unshift : O(N)

μ•žμ—λ‹€ 값을 μ‚½μž…ν•˜κ±°λ‚˜ μ‚­μ œν•˜λŠ” shift, unshiftλŠ” λ°°μ—΄μ˜ μΈλ±μŠ€μ— λ§Žμ€ 영ν–₯을 λΌμΉœλ‹€. 예둜 μ•žμ˜ 값을 μΆ”κ°€ν•œλ‹€κ³  μƒκ°ν•΄λ³΄μž.

 

[ 1, 2, 3, 4, 5 ]

   0   1   2   3   4                 

 

ν•΄λ‹Ή λ°°μ—΄ μ•žμ— 0 값을 μΆ”κ°€ν•˜λ©΄ μΈλ±μŠ€λŠ” μ•žμœΌλ‘œ ν•œ μΉΈμ”© 밀리고 뒀에 ν•˜λ‚˜κ°€ 좔가될 것이닀.

 

[ 0, 1, 2, 3, 4, 5 ]

   0   1   2   3   4   5

 

μ΄λ ‡κ²Œ 값을 μ•žμ— μΆ”κ°€ν•¨μœΌλ‘œ 인해 전체 μΈλ±μŠ€κ°€ λ°”λ€Œλ―€λ‘œ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(N) 이닀.

 

concat, slice, splice : O(N)

배열을 이어주고, 자λ₯΄κ³ , 값을 μΆ”κ°€ν•˜λ©΄ 인덱슀λ₯Ό μ‘°μ •ν•΄μ€˜μ•Όν•˜λ―€λ‘œ O(N)으둜 μƒκ°ν•˜λ©΄ νŽΈν•˜λ‹€.

 

forEach, map, filter, reduce :  O(N)

λ°°μ—΄μ˜ λ©”μ„œλ“œλ„ κ²°κ΅­ λ°°μ—΄μ˜ 길이만큼 배열을 μˆœνšŒν•΄μ•Όν•˜λ―€λ‘œ O(N)으둜 μƒκ°ν•˜λ©΄ λœλ‹€.

sort : O(NlogN)

μΈμžκ°’μœΌλ‘œ λ„˜μ–΄μ˜¨ ν•¨μˆ˜μ— 따라 값을 μ •λ ¬ν•œλ‹€. 기본적으둜 λ‚΄μž₯ sortλ₯Ό μ‚¬μš©ν•  λ•Œ ν¬λ‘¬μ—μ„œ 퀡 정렬을 μ‚¬μš©ν•œλ‹€.

ν‰κ· μ μœΌλ‘œ NlogN의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가진닀. μžμ„Έν•œ 건 λ‹€μŒμ— 정렬에 λŒ€ν•œ μ‹œκ°„λ³΅μž‘λ„λ₯Ό μ•Œμ•„λ³Ό λ•Œ ν¬μŠ€νŒ…ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

const arr = [1,26,76,85,3];

arr.sort((a, b) => a - b);

console.log(arr) // [1, 3, 26, 76, 85]

 

λ°°μ—΄μ˜ λ‚΄μž₯ ν•¨μˆ˜ 및 λ§€μ„œλ“œμ— λŒ€ν•œ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ•Œμ•„λ΄€λ‹€. μ™ λ§Œν•΄μ„œ shift, unshiftλ³΄λ‹€λŠ” push, pop을 μ΄μš©ν•˜λŠ” 게 μ‹œκ°„μ μœΌλ‘œ μœ λ¦¬ν•œ κ±Έ μ•Œ 수 μžˆλ‹€.

728x90
λ°˜μ‘ν˜•