2022 START WITH UDEMY μ±λ¦°μ λ‘ μ λ°μ΄ λΌμ, λ§μΉ¨ 곡λΆνκ³ μΆμλ JS μκ³ λ¦¬μ¦ κ³΅λΆλ₯Ό μ§μ λ°μ ν μ μκ² λμμ΄μ!
[κΈλ‘λ² Best] JavaScipt μκ³ λ¦¬μ¦ & μλ£κ΅¬μ‘° λ§μ€ν°ν΄λμ€ μμ μ μκ°ν΄λ³΄λλ‘ νκ² μ΅λλ€.
JavaScipt μκ³ λ¦¬μ¦ & μλ£κ΅¬μ‘° λ§μ€ν°ν΄λμ€ μμ
λ°λ‘κ°κΈ°
μ λ°λ―Έμμ ν μΈμ νκ³ μμΌλ μ°©ν κ°κ²©μ λ€μ΄λ³΄μλ κ²λ μΆμ²ν©λλ€.
μμ μ μμ΄κΆ κ°μ¬λμ΄ μ§ννμμ§λ§ νκΈ μλ§μ΄ μ§μλκΈ° λλ¬Έμ ν° κ±±μ μμ΄ μ λ€μ μ μμ΅λλ€.
κ·ΈλΌ, μμν΄λ³΄λλ‘ νκ² μ΅λλ€.
νλμ κ²°κ³Όλ₯Ό λμΆνκΈ° μν΄μ λ± νλμ μ½λλ§ μ λ΅μ΄ μλ 건 μλλ€. μ λ§κ°μ§μ λ°©λ²μ΄ μμ μ μλ€.
κ·Έλ λ€λ©΄ μ΄λ€ κ²μ΄ λ ν¨μ¨μ μΈ λ°©λ²μΌκΉ?
μ¬κΈ°μ λΉ μ€(Big O)κ° λ±μ₯νλ€.
λΉ μ€λ μ¬λ¬κ°μ§ μ½λλ₯Ό μΌλ°μ μΌλ‘ μλ‘ λΉκ΅νκ³ μ±λ₯μ νκ°νλ λ°©λ²μ΄λ€.
μκ³ λ¦¬μ¦ μ±λ₯μ λΆμνκΈ° μν΄μ λΉ μ€ νκΈ°λ₯Ό μ¬μ©νλ€. λΉ μ€λ₯Ό ν΅ν΄μ μκ° λ³΅μ‘λμ κ³΅κ° λ³΅μ‘λλ₯Ό ννν μ μλ€. λΉ μ€λ‘ μΈ‘μ λλ μκ³ λ¦¬μ¦μ μκ°κ³Ό κ³΅κ° λ³΅μ‘λλ νλμ¨μ΄μ μν₯μ λ°μ§ μκ³ μ€λ‘μ§ μκ³ λ¦¬μ¦ μλμ κ΄νμ¬λ§ μΈ‘μ νλ€.
performance.now()
λ λΈλΌμ°μ κ° λ¬Έμλ₯Ό λ§λλ μκ°, μ°½μ΄ μ΄λ¦° μκ°μ μλ €μ€λ€.
function ν¨μ{
//ν¨μλ΄μ©
}
const beforeFunc = performance.now();
ν¨μ();
const afterFunc = performance.now();
console.log(`μκ°κ²½κ³Ό : ${(afterFunc - beforeFunc) / 1000} seconds.`)
1000λΆμ 1μ΄ λ¨μλ‘ λμ΄μκΈ° λλ¬Έμ 1000μΌλ‘ λλ μ£Όμ΄μΌ νλ€.
β ν¨μ μ€ννλ λ° λλ μκ°μ΄ μΌμ νκ² μΆλ ₯λμ§ μλλ€. κΈ°κΈ°μ λ°λΌ, λμμ μ€ννκ³ μλ νλ‘κ·Έλ¨ λ±μ λ°λΌ ν¨μκ° λμνλ μκ°μ λ¬λΌμ§λ€.
π μ½λ μλ μκ°μ μΆλ ₯νμ¬ λΉκ΅νλ κ² λ³΄λ€, λΉ μ€ νκΈ°λ²μ μ΄μ©νμ¬ λΉκ΅νλ©΄ ν¨μ¬ κ°λ¨νκ³ κ°νΈν ν μ μλ€.
for (let i = 0; i < n; i++) {
console.log(i);
}
//O(n)
nμ΄ μ»€μ§μλ‘ λ£¨ν μμ μ°μ°μ μ€ννλ νμκ° λμ΄λκΈ° λλ¬Έμ O(n)μ΄λ€. μ¦ nλ§νΌμ μ°μ°μ΄ μΌμ΄λκΈ° λλ¬Έμ O(n)μ΄λΌκ³ ν μ μλ€.
for (let j = n - 1; j >= 0; j--) {
console.log(j);
//O(n)
μμ μ½λ λν nλ§νΌμ μ°μ°μ΄ μΌμ΄λλ κ²μ΄κΈ° λλ¬Έμ O(n)μ΄λ€.
function count(n) {
console.log("μ¬λΌκ°λ€");
for (let i = 0; i < n; i++) {
console.log(i);
}
console.log("λ΄λ €κ°λ€");
for (let j = n - 1; j >= n; j--) {
console.log(j);
}
}
//O(2n) = O(n)
λ°λΌμ μμ μ½λλ O(n)κ³Ό O(n)μ μ‘°ν©μ΄λ€.
μ! κ·Έλ λ€λ©΄ O(2n)μ΄κ² ꡬλ! λΌκ³ μκ°ν μλ μμ§λ§ νλ Έλ€.
λΉ μ€ νκΈ°μμλ μμλ 무μνκΈ° λλ¬Έμ 2nμ nμΌλ‘ κ°μ£Όνλ€. λ°λΌμ O(n)μ΄ 4κ° μλ 5κ° μλ O(n)μ΄ λλ€.
function print(n){
for(const i = 0; i < n; i++){
for(const j = 0; j < n; j++){
console.log(i,j);
}
}
}
μ΄λ² μ½λλ μμ λ€λ₯΄κ² μ€μ²©
μ΄ λμ΄μλ€.
μ¦, nλ²μ© μ€ννλ μ½λμμ λ nλ²μ© μ€ννλ μ½λκ° μλ€λ κ²μ΄λ€. μ΄λ κ² O(n) μ°μ° μμ O(n)μ°μ°μ΄ μ€μ²©λμ΄ μμΌλ©΄ O(n^2) nμ μ κ³±
μ΄ λλ€.
nμ΄ μ»€μ§μλ‘ μ€ν μκ°μ΄ n μ κ³± κ°μΌλ‘ λμ΄λλ€.
μμλ 무μνμ¬ μ΅λν λ¨μνκ² νννλ€.
O(100) => O(1)
O(2n) => O(n)
O(10n^2) => O(n^2)
μ΅κ³ μ°¨νλ§ λ¨κΈ΄λ€.
O(5n + 10) => O(n)
O(n^2 + 2n + 5) => O(n^2)
O(n)
function up(n){
for (const i = 1; i <= Math.max(3, n); i++){
console.log(i)
}
}
// O(n)
Math.max()
Math.max(μ
λ ₯κ°1, μ
λ ₯κ°2 .... )
μ
λ ₯ λ°μ κ°λ€ μ€μμ κ°μ₯ ν° μλ₯Ό λ°ννλ€.
μμ μ½λμμ nμ΄ 1000λ§μ΄ λ€μ΄κ°λ€λ©΄ 루νλ 100λ§λ² μ€νλ κ²μ΄λ€. μ¦, nμ΄ μ»€μ§μλ‘ ν¨μ μ€ν μ«μλ μ¦κ°νλ€λ κ²..!
λ°λΌμ ν¨μ μ€ν μ¦, μ°μ°μ κ°μκ° nμ μν₯μ λ°κΈ° λλ¬Έμ O(n)
λΌκ³ ν μ μλ€.
O(1)
function up(n){
for (const i = 1; i <= Math.min(3, n); i++){
console.log(i)
}
}
// O(1)
Math.min(μ λ ₯κ°1, μ λ ₯κ°2 ... ) μ μ λ ₯ λ°μ κ°λ€ μ€μμ κ°μ₯ μμ μ«μλ₯Ό λ°ννλ€.
μμ μ½λμμ Math.min(3, n)
μ 3κ³Ό nμ€ μμ μλ₯Ό λ°ννλ μ½λμ΄λ€. nμ΄ 100λ§λ²μ΄ λλ , κ·Έ μ΄μμ΄ λλ , 3λ³΄λ€ μ»€μ§λ©΄ 3λ²λ§ μ€νλ κ²μ΄λ€. μ¦, nμ μ¦κ°λ ν¨μ μ€νμ μ무 μν₯λ μ£Όμ§ μκ² λλ€.
μμ μ½λμμ 루ν νμμ μν₯μ μ£Όλ κ²μ 3 μ¦, μμκ° λλ€.
μ§κΈ κΉμ§ μ λ ₯μ΄ μ»€μ§ μλ‘ μκ³ λ¦¬μ¦μ μ€ν νμκ° μΌλ§νΌ λμ΄λλμ§ μλκ° μ΄λ»κ² λ°λλ μ§ (time complexity) μκ° λ³΅μ‘λμ λν΄ μμ보μλ€. μ΄μ λ κ³΅κ° λ³΅μ‘λ (Space complexity)μ λν΄ μμ보λλ‘ νμ.
μ λ ₯μ΄ μ»€μ§μλ‘ μκ³ λ¦¬μ¦μ΄ μΌλ§λ λ§μ 곡κ°μ μ°¨μ§νλ μ§μ λν΄ μμ보λλ‘ νμ.
λ¬Όλ‘ μ λ ₯κ°μ΄ 컀μ§λ©΄ λΉμ°ν 볡μ‘λλ μ¦κ°νκ² μ§λ§ μ¬κΈ°μλ μ λ ₯ κ°μ 무μνκ³ μκ³ λ¦¬μ¦ μμ²΄κ° μ΄λ€ μν₯μ μ£Όλ μ§μ λν΄ μμ보λλ νκ² λ€.
Most primitives( booleans, numbers, undefined, null) are constant space
-udemy[κΈλ‘λ²best] JS μκ³ λ¦¬μ¦& μλ£κ΅¬μ‘° λ§μ€ν°ν¬λμ€
κ³ μ 곡κ°(constant space)μ΄λ μ λ ₯ κ°, μκ³ λ¦¬μ¦ μ€νκ³Όλ κ΄λ ¨ μμ΄ μ¬μ©λλ 곡κ°μ΄λ€. λ³μλ₯Ό μ μ₯νλ λ±μ 곡κ°μ΄λΌκ³ μκ°νλ©΄ λλ€.
booleans, numbers, undefined, nullμ μμ 곡κ°μΌλ‘ μ·¨κΈλλ€λ κ²μ΄λ€.
λ°λΌμ μ
λ ₯μ ν¬κΈ°μλ μκ΄ μμ΄ μ
λ ₯κ°μ΄ 1μ΄λ 100μ΄λ κ³ μ μ μΈ κ³΅κ°μ κ°λλ€.
κ³ μ 곡κ°μ c(μμ)λΌκ³ ν μ μμΌλ©° O(1)μ΄λ€.
μ½κ² μκ°νλ©΄, 50μκ° 100μ보λ€λ 곡κ°μ λ μ°¨μ§ν κ²μ΄λ€.
μ¦, μ
λ ₯ κ°μ λ°λΌμ 곡κ°μ μ°¨μ§νλ μ λκ° λ³νκΈ° λλ¬Έμ O(n)μΈ κ²μ΄λ€.
μ¬κΈ°μ nμ λ°°μ΄μ κΈΈμ΄ νΉμ κ°μ²΄μ ν€ κ°μμΌ μ μλ€.
κΈΈμ΄κ° 10μΈ λ°°μ΄λ³΄λ€ 100μΈ λ°°μ΄μ΄ λ λ§μ 곡κ°μ μ°¨μ§νκΈ° λλ¬Έμ λ°°μ΄μ κΈΈμ΄μΈ nμ΄ μ»€μ§μλ‘ μ°¨μ§νλ 곡κ°λ 컀μ§λ€.
function add(arr){
const newArr = [];
for( let i =p; i < arr.length; i++){
newArr.push(i + arr[i]);
}
return newArr;
}
//O(n) space
const newArr = [];
μ μκ³ λ¦¬μ¦μ νμμ κ΄κ³μμ΄ λ³μ μ μΈμΌλ‘ ν λΉλλ λΆλΆμ΄λ€. μ΄λ c μ¦ O(1)μ κ³΅κ° λ³΅μ‘λλ₯Ό κ°μ§λ€κ³ ν μ μλ€.
newArr
μ μμ κ³ μ 곡κ°κ³Ό λ€λ₯΄λ€.
arr κ°μ΄ 컀μ§μλ‘ pushλλ μμμ μμ΄ λ§μμ§λ€. λ°λΌμ newArr
κ° μ°¨μ§νλ 곡κ°μ arrμ λΉλ‘νκ² μ»€μ§κΈ° λλ¬Έμ O(n) 곡κ°μ μ°¨μ§νλ€.
μμ μ½λμ κ³΅κ° λ³΅μ‘λλ O(n) + c μ΄μ§λ§ μ΅κ³ μ°¨νλ§ λ¨κΈ°κΈ° λλ¬Έμ O(n)μΌλ‘ λ¨μν ν μ μλ€.
μλ ν¨μμ λν κ³΅κ° λ³΅μ‘λλ₯Ό ꡬνμΈμ.
function logUpTo(n) {
for (var i = 1; i <= n; i++) {
console.log(i);
}
}
μ λ΅ : O(1)
μλ ν¨μμ λν κ³΅κ° λ³΅μ‘λλ₯Ό ꡬνμΈμ.
function logAtMost10(n) {
for (var i = 1; i <= Math.min(n, 10); i++) {
console.log(i);
}
}
μ λ΅ : O(1)
μλ ν¨μμ λν κ³΅κ° λ³΅μ‘λλ₯Ό ꡬνμΈμ.
function onlyElementsAtEvenIndex(array) {
var newArray = Array(Math.ceil(array.length / 2));
for (var i = 0; i < array.length; i++) {
if (i % 2 === 0) {
newArray[i / 2] = array[i];
}
}
return newArray;
}
μ λ΅ : O(n) arrayκ°μ»€μ§μλ‘ newArrayκ° μ°¨μ§νλ 곡κ°λ 컀μ§λ€.
μλ ν¨μμ λν κ³΅κ° λ³΅μ‘λλ₯Ό ꡬνμΈμ.
function subtotals(array) {
var subtotalArray = Array(array.length);
for (var i = 0; i < array.length; i++) {
var subtotal = 0; // O(1)
for (var j = 0; j <= i; j++) {
subtotal += array[j]; //O(1) subtotal κ°μ΄ λ³ν λΏ ν λΉνλ κ³΅κ° μμ²΄κ° μ»€μ§μ§ μκΈ° λλ¬Έ
}
subtotalArray[i] = subtotal; //O(n)
}
return subtotalArray;
}
μ λ΅ : O(n)
μ΄μ§ λ‘κ·Έλ 1μ΄ λκΈ° μ κΉμ§ μ«μλ₯Ό 2λ‘ λλ μ μλ νμλ₯Ό μλ―Ένλ€.
μ΄ 3λ² λλ μ μλ€. λ°λΌμ log(8) = 3 μ΄λ€.
κ·Έλμ λ‘κ·Έ κ°λ μ μΈμ λμ€λ?
μμ μκ³ λ¦¬μ¦μ λν΄μλ μμΌλ‘ μ°¨μ°¨ λ°°μ보λλ‘ νμ.
μΆμ²: https://www.bigocheatsheet.com/