🚀 μ„±μž₯일지 6.0

μ±… ν–‰λ³΅ν•œ 이기주의자(웨인 닀이어)의 λ‚΄μš©μ— μžκ·Ήλ°›μ•„ μ‹œμž‘ν•˜λŠ” μ†Œλ°•ν•œ μ„±μž₯기둝

μ‚΄μ•„μžˆλŠ” 꽃과 죽은 꽃은 μ–΄λ–»κ²Œ κ΅¬λ³„ν•˜λŠ”κ°€?
μ„±μž₯ν•˜κ³  μžˆλŠ” 것이 μ‚΄μ•„ μžˆλŠ” 것이닀.
생λͺ…μ˜ μœ μΌν•œ μ¦κ±°λŠ” μ„±μž₯이닀!

🌾 (4.0)ν•™μŠ΅ ν‚€μ›Œλ“œμ—μ„œ μ΅œλŒ€ν•œ κ°„λ‹¨ν•œ 정보 제곡, κ³ λ―Όμ—μ„œ λ‚΄ κ²½ν—˜μ„ μžμ„Ένžˆ 적자!
πŸ₯Š (5.0)ν•™μŠ΅ ν‚€μ›Œλ“œλŠ” ν•œμ€„μ˜ ν•΅μ‹¬μœΌλ‘œλ§Œ 정리, 성곡/μ‹€νŒ¨ 일지 μž‘μ„±ν•˜κΈ°! 이 λ•Œ, μ‹€νŒ¨μ˜ κ²½ν—˜μ€ μžμ„Ένžˆ 적기!
πŸ‰ (6.0)<μ™„μ „ 개편!!!> 맀일 μŠ΅κ΄€μ μœΌλ‘œ ν•΅μ‹¬λ§Œ 적을 수 있게 ν”„λ ˆμž„ λ³€κ²½. 성곡보단 μ‹€νŒ¨μ— μ΄ˆμ μ„ λ§žμΆ”κΈ°.

  • πŸ‰ (6.1)<μˆ˜μ •> 맀번 성곡, μ‹€νŒ¨λ₯Ό λ”°λ‘œ μ λŠ” 것보단 κ²½ν—˜μœΌλ‘œ ν‘œν˜„ν•˜μž!
  • πŸ‰ (6.2)<μˆ˜μ •> 일지 μΉ΄ν…Œκ³ λ¦¬ μˆ˜μ • λ³€κ²½!(κ²½ν—˜ -> κ³ λ―Ό -> 회고 -> κ΅ν›ˆ)

β˜€οΈ 였늘의 κ²½ν—˜

μ›Ήμ†ŒμΌ“ ν”„λ‘œν† μ½œ

  • HTML5 ν‘œμ€€ 기술
  • HTTP ν™˜κ²½μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 사이에 ν•˜λ‚˜μ˜ TCP 연결을 기반으둜 μ‹€μ‹œκ°„ 전이쀑 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.
    • 전이쀑 톡신: 일반적인 HTTP 톡신과 λ‹€λ₯΄κ²Œ μ–‘λ°©ν–₯으둜 μ§„ν–‰λ˜λŠ” 톡신
  • μ›Ήμ†ŒμΌ“ 기술이 없을 λ•ŒλŠ” Pollingμ΄λ‚˜ Long Poliing 의 λ°©μ‹μœΌλ‘œ κ΅¬ν˜„
    • Polling: ν΄λΌμ΄μ–ΈνŠΈκ°€ 주기적으둜 μš”μ²­μ„ 보낸닀.
    • Long Poling: μ„œλ²„κ°€ μ˜λ„μ μœΌλ‘œ μš”μ²­μ— λŒ€ν•œ 응닡을 μ§€μ—°μ‹œν‚¨λ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ 보내고 μ„œλ²„λŠ” 데이터가 μ€€λΉ„λ˜λ©΄ 응닡을 ν•˜λ©° κ·Έ 응닡을 λ°›λŠ” μ¦‰μ‹œ ν΄λΌλŠ” λ‹€μ‹œ μš”μ²­μ„ κ±Έμ–΄λ†“λŠ”λ‹€.

초기 μ›Ήμ˜ 탄생 λͺ©μ μ€ λ¬Έμ„œ 전달 그리고 ν•˜μ΄νΌλ§ν¬λ₯Ό ν†΅ν•œ λ¬Έμ„œ μ—°κ²°μ΄μ—ˆλ‹€. 그런 μ˜λ―Έμ—μ„œ HTTP ν”„λ‘œν† μ½œμ€ λͺ©μ μ— 맀우 λΆ€ν•©ν•˜λŠ” λͺ¨λΈμ΄μ—ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ‹œλŒ€κ°€ λ³€ν•˜λ©΄μ„œ μ›Ήμ—κ²Œ 쒀더 동적인 λ™μž‘μ΄ μš”κ΅¬λ˜μ—ˆκ³  이둜 인해 μ—¬λŸ¬ μƒˆλ‘œμš΄ 기술이 νƒ„μƒν•˜μ˜€λ‹€. κ·Έ 쀑 μ‹€μ‹œκ°„ μ–‘λ°©ν–₯ 톡신을 μœ„ν•œ μŠ€νŽ™μ΄ λ°”λ‘œ μ›Ή μ†ŒμΌ“ ν”„λ‘œν† μ½œμ΄λ‹€.

left, right indexλ₯Ό 톡해 배열을 μˆœνšŒν•˜λŠ” 방법

물건 가격이 λ°°μ—΄λ‘œ 주어지고 각 μΈλ±μŠ€λŠ” λ‚ μ§œλ₯Ό μ˜λ―Έν•œλ‹€. 이 λ•Œ, μ΅œλŒ€ 이읡을 κ΅¬ν•˜λŠ” 문제λ₯Ό ν‘ΈλŠ” 방법이닀.

const maxProfit = (prices) => {
  let left = 0;
  let right = 1;
  let maxProfit = 0;
  while (right < prices.length) {
    const first = prices[left];
    const second = prices[right];
    if (first < second) {
      const profit = second - first;
      if (profit > maxProfit) maxProfit = profit;
    } else {
      left = right;
    }
    right++;
  }
  return maxProfit;
};

🫧 였늘의 고민

λ°°μ—΄ 순회 μ‹œκ°„ 초과

μœ„μ˜ κ²½ν—˜μ—μ„œ 적은 문제λ₯Ό ν‘ΈλŠ”λ°, 처음 λ‚˜μ˜ κ΅¬ν˜„μ€ μ•„λž˜μ™€ κ°™μ•˜λ‹€.

let maxProfit = function (prices) {
  let initialValue = 0;
  const callbackFn = (result, item, index, arr) => {
    const afterArr = arr.slice(index);
    const maxPrice = Math.max(...afterArr);
    const maxProfit = maxPrice - item;
    if (maxProfit > result) return maxProfit;
    return result;
  };
  const totalMaxProfit = prices.reduce(callbackFn, initialValue);
  return totalMaxProfit;
};

μ²˜μŒμ—” reduceλ₯Ό ν™œμš©ν•΄μ„œ ν’€μ–΄μ„œ λ„ˆλ¬΄ μ‹ λ‚¬λŠ”λ°, λͺ‡λͺ‡ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—μ„œ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν–ˆλ‹€. μ•Œμ•„λ³΄λ‹ˆ reduceμ—μ„œ loopλ₯Ό 돌고, κ·Έ μ•ˆμ— slice()와 Math.max()도 loopλ₯Ό 돌기 λ•Œλ¬Έμ— O(N^2)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§€κ²Œ λ˜μ–΄ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν–ˆλ‹€.

κ²°κ΅­ 풀이λ₯Ό 보게 λ˜μ—ˆλŠ”λ°, left, right indexλ₯Ό ν™œμš©ν•΄μ„œ loopλ₯Ό ν•œλ²ˆλ§Œ λŒλ©΄μ„œ ν’€ 수 μžˆμ—ˆλ‹€. 그게 κ²½ν—˜λž€μ— 적은 풀이이닀.

🌈 였늘의 회고

후… μ‰¬μš΄ μ•Œκ³ λ¦¬μ¦˜ 문제라고 μƒκ°ν–ˆλŠ”λ° μ•„μ˜ˆ 관점을 바꾸지 λͺ»ν•˜λ‹ˆ μ‰½κ²Œ 풀지 λͺ»ν–ˆλ˜ 것 κ°™λ‹€. μ΄λž˜μ„œ 많이 풀어보고 κ³΅λΆ€ν•΄μ„œ μ–΄λŠμ •λ„ κ²½ν—˜μ„ ν•˜λŠ” 게 μ€‘μš”ν•œ 것 κ°™λ‹€.

🐾 였늘의 κ΅ν›ˆ

κ³ λ―Όν•˜μ§€λ§κ³  풀어보고 κ΅¬ν˜„ν•˜λ©΄μ„œ κ²½ν—˜μ„ μŒ“κ³  배우자. ν•œ 번 κ²½ν—˜ν•œλ‹€κ³  ν•΄μ„œ λ‹€ λ˜λŠ”κ±΄ μ•„λ‹ˆμ§€λ§Œ ν•œ λ²ˆμ΄λΌλ„ κ²½ν—˜ν•˜λŠ” 게 μ€‘μš”ν•˜λ‹€.

πŸͺ΅ μ°Έκ³