πŸ“… TIL #22

κ³ μ°¨ ν•¨μˆ˜


πŸ‘‰ μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ° vs μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°


1.μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ° (imperative programming)

μ›ν•˜λŠ” μž‘μ—…μ„ β€œμ–΄λ–»κ²Œ ν•  것 인가”

μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ°μ€ μ–΄λ–»κ²Œ 쀑점을 두고 ν”„λ‘œκ·Έλž˜λ°μ„ ν•  것인지에 λŒ€ν•΄ 쀑점을 λ‘λŠ” 것을 λ§ν•œλ‹€.

즉, μ½”λ“œμ— 무엇을 μ–΄λ–»κ²Œ ν•˜κ³  싢은지 ν‘œν˜„ν•΄μ•Ό ν•œλ‹€! μ½”λ“œλ₯Ό λ³΄λ©΄μ„œ μ΄ν•΄ν•΄λ³΄μž!


// 배열을 νŒŒλΌλ―Έν„°λ‘œ λ°›κ³  각 μš”μ†Œλ“€μ˜ 값에 2λ₯Ό κ³±ν•˜λŠ” ν•¨μˆ˜
function getDoubledElements(arr) {
  let resultArr = [];

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

  return resultArr;
}

console.log([1, 2, 3]); // [2, 4, 6];

μœ„ μ½”λ“œμ²˜λŸΌ μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ° 방식은 λ°˜λ³΅λ¬Έμ„ μ΄μš©ν•΄ λͺ¨λ“  μš”μ†Œμ— ν•œ λ²ˆμ”© 접근을 ν•΄μ„œ

결과값을 λ°˜ν™˜ν•˜λŠ” 방법을 κ΅¬ν˜„ν•˜κ³  μžˆλ‹€.



2.μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ° (declarative programming)

둜직이 β€œλ¬΄μ—‡μΈμ§€λ₯Όβ€ ν‘œν˜„μ‹μœΌλ‘œ λ‚˜νƒ€λ‚Έλ‹€

λ‚΄λΆ€μ μœΌλ‘œ μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ κ΅¬ν˜„ν–ˆλŠ”μ§€, λ°μ΄ν„°λŠ” μ–΄λ–»κ²Œ ν˜λŸ¬κ°€λŠ”μ§€ λ°νžˆμ§€ μ•Šμ€ 채 μ—°μ‚°/ μž‘μ—…μ„ ν‘œν˜„ν•˜λŠ” 방식을 선언적 ν”„λ‘œκ·Έλž˜λ°μ΄λΌκ³  ν•œλ‹€.

즉, ν•„μš”ν•œ 것에 λŒ€ν•œ 과정을 ν•˜λ‚˜ν•˜λ‚˜ κ΅¬ν˜„ν•˜λŠ” 것 λ³΄λ‹€λŠ” ν•„μš”ν•œ 것이 μ–΄λ–€ 것인지에 λŒ€ν•΄ 쀑점을 λ‘λŠ” 방식이닀.


//배열을 νŒŒλΌλ―Έν„°λ‘œ λ°›κ³  λͺ¨λ“  μš”μ†Œλ“€μ˜ 값에 2λ₯Ό κ³±ν•˜λŠ” ν•¨μˆ˜
function getDoubledElement(arr) {
  const resultArr = arr.map(el => el * 2);

  return resultArr;
}

console.log([1, 2, 3]); // [2, 4, 6];

이 처럼 μ ˆμ°¨ν˜• ν”„λ‘œκ·Έλž˜λ° 방식이 좔상화 된 것이라고 λ³Ό 수 μžˆλ‹€. μ„ μ–Έν˜• ν”„λ‘œκ·Έλž˜λ°μ€ map () κ³Ό 같이 μ–΄λ–»κ²Œ

μž‘λ™λ˜λŠ”μ§€ μ•Œ ν•„μš”μ—†μ΄ 무엇을 μ›ν•˜λŠ”μ§€μ— 쀑점을 λ‘λŠ” 방식이닀.

ν•˜μ§€λ§Œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ³΅μž‘λ„κ°€ λ†’μ•„μ§ˆμˆ˜λ‘ μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ€ 떨어지며 λ¦¬νŒ©ν† λ§ν•˜κΈ°κ°€ 맀우 μ–΄λ €μ›Œμ§„λ‹€.

λ˜ν•œ 항상 같은 결과값을 κΈ°λŒ€ν•  수 μ—†μœΌλ―€λ‘œ μ–Έμ œ μ–΄λ””μ„œ μ—λŸ¬κ°€ λ‚˜μ˜€λŠ”μ§€ λͺ¨λ₯΄λŠ” μœ„ν—˜λ„ μ•ˆκ³  κ°€μ•Όν•œλ‹€!! λͺ…심!



πŸ‘‰ κ³ μ°¨ν•¨μˆ˜ 문제 getIndex(arr, num)

μ½”ν”Œλ¦Ώ 13번

비ꡐ적 μ–΄λ €μ› λ˜ λ¬Έμ œλŠ” μ•„λ‹ˆμ˜€μ§€λ§Œ 이 ν•œ 문제둜 λ‹€μ–‘ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ²Œ 된 계기가 μžˆμ–΄μ„œ 적어보렀고 ν•œλ‹€!


  • 문제 :

μ •μˆ˜λ₯Ό μš”μ†Œλ‘œ κ°–λŠ” λ°°μ—΄κ³Ό μ •μˆ˜(num)λ₯Ό μž…λ ₯λ°›μ•„ num을 배열에 μΆ”κ°€ν•˜κ³  μ •λ ¬ν•œλ‹€κ³  κ°€μ •ν•  경우, num의 인덱슀λ₯Ό 리턴


  • μ£Όμ˜μ‚¬ν•­ :
  1. 반볡문(for, while) μ‚¬μš© κΈˆμ§€
  2. arr.sort , arr.indexOf μ‚¬μš© κΈˆμ§€
  3. 빈 배열일 경우, 0을 리턴
  4. num은 arr의 μ–΄λ–€ μš”μ†Œμ™€λ„ 같지 μ•Šλ‹€κ³  κ°€μ •


  • μž…μΆœλ ₯ μ˜ˆμ‹œ
let output = getIndex([5, 4, 1, 3], 2);
console.log(output); // --> 1

output = getIndex([10, 5, 1, 3], 13);
console.log(output); // --> 4


  • μˆ˜λ„μ½”λ“œ
  1. filter ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ num 보닀 μž‘μ€ 수만 κ°€μ Έμ˜¨λ‹€.
  2. num 보닀 μž‘μ€ 수의 length λ₯Ό 리턴 ν•œλ‹€.



  • code
//filter μ‚¬μš©
function getIndex(arr, num) {
  const result = arr.filter(el => el < num);

  return result.length;
}

λ‚˜λŠ” μ΄λŸ°μ‹μœΌλ‘œ filter λ₯Ό μ‚¬μš©ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•˜μ˜€λ‹€. ν•˜μ§€λ§Œ reduceλ₯Ό μ‚¬μš©ν•΄μ„œ ν’€ μˆ˜λ„ μžˆμ—ˆκ³ , reduceλ‘œλ„ κ΅¬ν˜„μ„ ν•΄λ³΄μ•˜λ‹€.


//reduce μ‚¬μš© 1
function getIndex(arr, num) {
  arr.push(num);

  const result = arr.reduce((acc, cur) => {
    if (cur < num) {
      acc.push(cur);
      return acc;
    } else {
      return acc;
    }
  }, []);

  return result;
}


//reduce μ‚¬μš© 2
function getIndex(arr, num) {
  arr.push(num);

  return arr.reduce((acc, cur) => {
    if (cur < num) {
      acc++;
    }

    return acc;
  }, 0);
}

이미 문제λ₯Ό ν•΄κ²°ν–ˆμ§€λ§Œ reduceλ₯Ό ν™œμš©ν•΄μ„œ ν•œ 번 더 ν’€μ–΄ λ³Έ μ΄μœ λŠ” reduce에 더 μ μ‘ν•˜κΈ° μœ„ν•΄μ„œ μ˜€λ‹€.

였늘 κ³ μ°¨ν•¨μˆ˜, filter, map, reduce 에 λŒ€ν•΄μ„œ λ§Žμ€ 문제λ₯Ό 풀어보고 λ‹€λ£¨λŠ” μ—°μŠ΅μ„ ν•˜μ˜€λ‹€!! :muscle:



πŸ‘Š λ‚΄μΌμ˜ TIW(today I Will)

μ½”ν”Œλ¦Ώ μ•Œκ³ λ¦¬μ¦˜