Daily/Today I Learned

22.08.10_TIL

ν˜Έλ°€μ΄ 2022. 8. 9. 23:09

πŸ“Œ μ΄μ œ 컀리큘럼 쀑 ν•™μŠ΅μ„ ν•˜λŠ” μ‹œκ°„μ—μ„œ 남은 것은 μ•Œκ³ λ¦¬μ¦˜ 밖에 남지 μ•Šμ•˜λ‹€. λ‹€μ–‘ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜κ³  λ°°μš°λ©΄μ„œ λ‚˜μ˜ μ‹€λ ₯에 λŒ€ν•΄μ„œ κΉ¨λ‹¬μ•˜λ˜ μ‹œκ°„μ΄μ—ˆκ³  λ§Žμ€ 것을 λ°°μ›€μœΌλ‘œ λ‚˜μ˜ μ—­λŸ‰μ„ μ„±μž₯μ‹œν‚¬ 수 μžˆλŠ” 계기가 λ˜μ—ˆλ‹€. 남은 μ•Œκ³ λ¦¬μ¦˜ ν•™μŠ΅κΉŒμ§€ 끝마치고 ν”„λ‘œμ νŠΈμ— λ“€μ–΄κ°ˆ λ•Œ νŒ€μ›λ“€κ³Ό μ›ν™œν•œ ν˜‘μ—…μ„ 톡해 쒋은 κ²°κ³Όλ₯Ό 낳을 수 μžˆλ„λ‘ ν•΄λ³΄μž!!

πŸ“— 였늘 ν•™μŠ΅ν•œ λ‚΄μš©

μ•Œκ³ λ¦¬μ¦˜

  • 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ΅œμ„ μ˜ 선택
  • μ–΄λ–€ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ 일련의 절차λ₯Ό μ •μ˜ν•˜κ³ , κ³΅μ‹ν™”ν•œ ν˜•νƒœλ‘œ ν‘œν˜„ν•œ μΌμ’…μ˜ 문제의 풀이 방법을 μ˜λ―Έν•œλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ˜ λͺ…μ‹œ 쑰건

  • μž…λ ₯: 좜λ ₯에 ν•„μš”ν•œ 자료λ₯Ό μž…λ ₯받을 수 μžˆμ–΄μ•Όν•œλ‹€. κΌ­ μž…λ ₯을 받지 μ•Šμ•„λ„ λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜λ„ μžˆλ‹€.
  • 좜λ ₯: 싀행이 되면 적어도 ν•œ 가지 μ΄μƒμ˜ κ²°κ³Όλ₯Ό λ°˜λ“œμ‹œ 좜λ ₯ν•΄μ•Όν•œλ‹€.
  • μœ ν•œμ„±: μœ ν•œν•œ λͺ…λ Ήμ–΄λ₯Ό μˆ˜ν–‰ν•œ ν›„, μœ ν•œν•œ μ‹œκ°„ 내에 μ’…λ£Œν•΄μ•Ό ν•œλ‹€.
  • λͺ…ν™•μ„±: 각 λ‹¨κ³„λŠ” λ‹¨μˆœν•˜κ³  λͺ…ν™•ν•΄μ•Ό ν•˜λ©°, λͺ¨ν˜Έν•΄μ„œλŠ” μ•ˆλœλ‹€.
  • νš¨μœ¨μ„±: κ°€λŠ₯ν•œ ν•œ νš¨μœ¨μ μ΄μ–΄μ•Ό ν•œλ‹€. λͺ¨λ“  과정이 λͺ…λ°±ν•˜κ²Œ μ‹€ν–‰ κ°€λŠ₯ν•΄μ•Ό ν•˜λ©°, μ‹€ν–‰ κ°€λŠ₯성이 λ–¨μ–΄μ§€λŠ” μ•Œκ³ λ¦¬μ¦˜μ€ νš¨μœ¨μ μ΄μ§€ λͺ»ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄λΌ λ³Ό 수 μžˆλ‹€.

μ‹œκ°„ λ³΅μž‘λ„ 

μž…λ ₯κ°’μ˜ 변화에 따라 연산을 μˆ˜ν–‰ν•  λ•Œ , μ—°μ‚° νšŒμˆ˜μ— λΉ„ν•΄ κ±Έλ¦¬λŠ” μ‹œκ°„

  • μ‹œκ°„ λ³΅μž‘λ„ ν‘œκΈ° 방법
    • Big-O(λΉ…-였)
      • κ°€μž₯ 자주 μ‚¬μš©λ˜λŠ” ν‘œκΈ°λ²•
      • μ΅œμ•…μ˜ 경우λ₯Ό κ³ λ €ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” κ³Όμ •μ—μ„œ μ†Œμš”λ˜λŠ” μ΅œμ•…μ˜ μ‹œκ°„κΉŒμ§€ κ³ λ €ν•  수 μžˆλ‹€.
    • Big-Ω(λΉ…-μ˜€λ©”κ°€)
    • Big-θ(λΉ…-세타)

λΉ…μ˜€ ν‘œκΈ°λ²• μ‹œκ°„λ³΅μž‘λ„ (feat.codestates)

Big-O ν‘œκΈ°λ²•μ˜ μ’…λ₯˜

  • O(1): Constant complexity
    • μž…λ ₯값이 μ¦κ°€ν•˜λ”λΌλ„ μ‹œκ°„μ΄ λŠ˜μ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€.
    • μž…λ ₯κ°’μ˜ 크기와 관계없이 μ¦‰μ‹œ 좜λ ₯값을 μ–»μ–΄λ‚Ό 수 μžˆλ‹€.
  • O(n): linear complexity
    • μž…λ ₯값이 증가함에 따라 μ‹œκ°„ λ˜ν•œ 같은 λΉ„μœ¨λ‘œ μ¦κ°€ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. (1쀑 forλ¬Έ)
  • O(log n): logarithmic complexity
    • O(1) λ‹€μŒμœΌλ‘œ λΉ λ₯Έ μ‹œκ°„ λ³΅μž‘λ„μ΄λ‹€.
    • Binary Search Tree와 같은 이동할 λ•Œλ§ˆλ‹€ 경우의 μˆ˜κ°€ 절반으둜 μ€„μ–΄λ“œλŠ” ꡬ쑰의 μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
  • O(n2): quadratic complexity
    • μž…λ ₯값이 증가함에 따라 μ‹œκ°„μ΄ n의 제곱수의 λΉ„μœ¨λ‘œ μ¦κ°€ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. (2쀑 for문이상)
  • O(2^n): exponential complexity
    • Big-O ν‘œκΈ°λ²• 쀑 κ°€μž₯ 느린 μ‹œκ°„ λ³΅μž‘λ„ 이닀.
    • 맀번 접근을 ν•  λ•Œλ§ˆλ‹€ μ‹œκ°„μ΄ 2배둜 λŠ˜μ–΄λ‚˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. (λŒ€ν‘œ: ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄)

곡간 λ³΅μž‘λ„

  • μ•Œκ³ λ¦¬μ¦˜μ΄ μˆ˜ν–‰λ˜λŠ” 데에 ν•„μš”ν•œ λ©”λͺ¨λ¦¬μ˜ μ΄λŸ‰μ„ μ˜λ―Έν•œλ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ ν•„μš”λ‘œ ν•˜λŠ” λ©”λͺ¨λ¦¬ 곡간을 μ‚°μΆœν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

Greedy Algorithm (νƒμš• μ•Œκ³ λ¦¬μ¦˜)

  • μ„ νƒμ˜ μˆœκ°„λ§ˆλ‹€ λ‹Ήμž₯ λˆˆμ•žμ— λ³΄μ΄λŠ” 졜적의 μƒν™©λ§Œμ„ μ°Ύμ•„ μ΅œμ’…μ μΈ 해닡에 λ„λ‹¬ν•˜λŠ” 방법이닀.
  • νŠΉμ§•
    • νƒμš•μ  선택 속성(Greedy Choice Property): μ•žμ˜ 선택이 μ΄ν›„μ˜ 선택에 영ν–₯을 주지 μ•ŠλŠ”λ‹€.
    • 졜적 λΆ€λΆ„ ꡬ쑰(Optimal Substructure): λ¬Έμ œμ— λŒ€ν•œ μ΅œμ’… ν•΄κ²° 방법은 λΆ€λΆ„ λ¬Έμ œμ— λŒ€ν•œ 졜적 문제 ν•΄κ²° λ°©λ²•μœΌλ‘œ κ΅¬μ„±λœλ‹€.
  • λŒ€ν‘œλ¬Έμ œ: κ±°μŠ€λ¦„λˆ 문제

Greedy Algorithm 문제 ν•΄κ²° 단계

  1. 선택 절차(Selection Procedure): ν˜„μž¬ μƒνƒœμ—μ„œμ˜ 졜적의 해닡을 μ„ νƒν•œλ‹€.
  2. μ μ ˆμ„± 검사(Feasibility Check): μ„ νƒλœ ν•΄κ°€ 문제의 쑰건을 λ§Œμ‘±ν•˜λŠ”μ§€ κ²€μ‚¬ν•œλ‹€.
  3. ν•΄λ‹΅ 검사(Solution Check): μ›λž˜μ˜ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆλŠ”μ§€ κ²€μ‚¬ν•˜κ³ , ν•΄κ²°λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ 선택 절차둜 λŒμ•„κ°€ μœ„μ˜ 과정을 λ°˜λ³΅ν•œλ‹€.

Algorithm κ΅¬ν˜„μ˜ 기초

  • μ•Œκ³ λ¦¬μ¦˜μ„ ν‘Όλ‹€? λ‚΄κ°€ μƒκ°ν•œ 문제 ν•΄κ²° 과정을 μ»΄ν“¨νŒ… μ‚¬κ³ λ‘œ λ³€ν™˜ν•˜μ—¬ μ½”λ“œλ‘œ κ΅¬ν˜„ν•œλ‹€λŠ” 것이닀.
  • μ•Œκ³ λ¦¬μ¦˜μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ„ νƒν•œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 문법을 μ •ν™•νžˆ μ•Œκ³  μžˆμ–΄μ•Ό ν•˜λ©°, 문제의 쑰건에 μ „λΆ€ λΆ€ν•©ν•˜λŠ” μ½”λ“œλ₯Ό μ‹€μˆ˜ 없이 λΉ λ₯΄κ²Œ μž‘μ„±ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ 두어 μ—°μŠ΅ν•΄μ•Όν•œλ‹€.

μ™„μ „ 탐색

  • λͺ¨λ“  λ¬Έμ œλŠ” μ™„μ „ νƒμƒ‰μœΌλ‘œ ν’€ 수 μžˆλ‹€.
  • ꡉμž₯히 λ‹¨μˆœν•˜κ³  λ¬΄μ‹ν•˜μ§€λ§Œ 닡이 무쑰건 μžˆλŠ” κ°•λ ₯ν•œ μž₯점을 가지고 μžˆλ‹€.
  • 첫 번째 κ·œμΉ™μ€ λ§Œμ‘±μ‹œν‚¬ 수 μžˆμ§€λ§Œ 두 번째 κ·œμΉ™μ€ λ§Œμ‘±ν•  수 μ—†λŠ” κ²½μš°κ°€ μžˆλ‹€.

μ™„μ „ 탐색을 ν•˜λŠ” 방법

  • Brute Force(쑰건/λ°˜λ³΅μ„ μ‚¬μš©ν•˜μ—¬ ν•΄κ²°), μž¬κ·€, μˆœμ—΄, DFS/BFS λ“±

Brute Force (무차별 λŒ€μž… 방법)

  • μˆœμˆ˜ν•œ μ»΄ν“¨νŒ… μ„±λŠ₯에 μ˜μ‘΄ν•˜μ—¬ λͺ¨λ“  κ°€λŠ₯성을 μ‹œλ„ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법이닀.(완전탐색)
  • 곡간, μ‹œκ°„ λ³΅μž‘λ„μ˜ μš”μ†Œλ₯Ό κ³ λ €ν•˜μ§€ μ•Šκ³  μ΅œμ•…μ˜ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ·¨ν•˜λ”λΌλ„ 정닡을 μ°ΎμœΌλ €λŠ” 방법이닀.

Brute Forceκ°€ μ‚¬μš©λ˜λŠ” 경우

  • ν”„λ‘œμ„ΈμŠ€ 속도λ₯Ό λ†’μ΄λŠ”λ° μ‚¬μš©ν•  수 μžˆλŠ” λ‹€λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ΄ 없을 λ•Œ
  • 문제λ₯Ό ν•΄κ²°ν•˜λŠ” μ—¬λŸ¬ μ†”λ£¨μ…˜μ΄ 있고 각 μ†”λ£¨μ…˜μ„ 확인해야 ν•  λ•Œ

Brute Force의 ν•œκ³„

  • λ¬Έμ œκ°€ λ³΅μž‘ν•΄μ§ˆμˆ˜λ‘ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ λ§Žμ€ μžμ›(μ‹œκ°„, μ»΄ν“¨νŒ…)을 ν•„μš”λ‘œ ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄ 될 수 μžˆλ‹€.

Brute Forceλ₯Ό μ‚¬μš©ν•˜λŠ” 문제

  • 순차 검색 μ•Œκ³ λ¦¬μ¦˜ (Sequential Search)
    • λ°°μ—΄μ•ˆμ— νŠΉμ • 값이 μ‘΄μž¬ν•˜λŠ”μ§€ 검색할 λ•Œ 인덱슀 0λΆ€ν„° λ§ˆμ§€λ§‰ μΈλ±μŠ€κΉŒμ§€ μ°¨λ‘€λŒ€λ‘œ κ²€μƒ‰ν•œλ‹€.
  • λ¬Έμžμ—΄ 맀칭 μ•Œκ³ λ¦¬μ¦˜ (Brute Force String Matching)
    • 길이가 n인 전체 λ¬Έμžμ—΄κ³Ό 길이가 m인 λ¬Έμžμ—΄ νŒ¨ν„΄μ„ ν¬ν•¨ν•˜λŠ”μ§€λ₯Ό κ²€μƒ‰ν•œλ‹€.
  • 선택 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ (Selection Sort)
    • 전체 배열을 κ²€μƒ‰ν•˜μ—¬ ν˜„μž¬ μš”μ†Œμ™€ λΉ„κ΅ν•˜κ³  μ»¬λ ‰μ…˜μ΄ μ™„μ „νžˆ 정렬될 λ–„κΉŒμ§€ ν˜„μž¬ μš”μ†Œλ³΄λ‹€ 더 μž‘κ±°λ‚˜ 큰 μš”μ†Œ(μ˜€λ¦„μ°¨μˆœ, λ‚΄λ¦Όμ°¨μˆœ)λ₯Ό κ΅ν™˜ν•˜λŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
  • 버블 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ (Bubble Sort)
  • BFS, DFS
  • DP

Dynamic Programming (DP, 동적 κ³„νšλ²•)

  • ν•˜λ‚˜μ˜ λ¬Έμ œλŠ” 단 ν•œ 번만 ν’€λ„λ‘ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
  • νƒμš• μ•Œκ³ λ¦¬μ¦˜κ³Ό ν•¨κ»˜ μ–ΈκΈ‰λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ©°, νƒμš• μ•Œκ³ λ¦¬μ¦˜κ³Ό 같이 μž‘μ€ λ¬Έμ œμ—μ„œ μΆœλ°œν•œλ‹€.
  • λͺ¨λ“  경우의 수λ₯Ό μ‘°ν•©ν•΄ 졜적의 해법을 μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
  • 주어진 문제λ₯Ό μ—¬λŸ¬ 개의 (μž‘μ€) ν•˜μœ„ 문제둜 λ‚˜λˆ„μ–΄ ν’€κ³ , ν•˜μœ„ λ¬Έμ œλ“€μ˜ ν•΄κ²° 방법을 κ²°ν•©ν•˜μ—¬ μ΅œμ’… 문제λ₯Ό ν•΄κ²°ν•œλ‹€.
  • ν•˜μœ„ 문제λ₯Ό κ³„μ‚°ν•œ λ’€ κ·Έ 해결책을 μ €μž₯ν•˜κ³ , λ‚˜μ€‘μ— λ™μΌν•œ ν•˜μœ„ 문제λ₯Ό λ§Œλ‚  경우 μ €μž₯된 해결책을 μ μš©ν•΄ 계산 횟수λ₯Ό 쀄인닀.

Dynamic Programming을 μ‚¬μš©ν•  수 μžˆλŠ” 쑰건

  • Overlapping Sub-problems: ν° 문제λ₯Ό μž‘μ€ 문제둜 λ‚˜λˆŒ 수 있고, 이 μž‘μ€ λ¬Έμ œκ°€ μ€‘λ³΅ν•΄μ„œ λ°œκ²¬λœλ‹€.
  • Optimal Substructure: μž‘μ€ λ¬Έμ œμ—μ„œ κ΅¬ν•œ 정닡은 그것을 ν¬ν•¨ν•˜λŠ” 큰 λ¬Έμ œμ—μ„œλ„ κ°™λ‹€. 즉, μž‘μ€ λ¬Έμ œμ—μ„œ κ΅¬ν•œ 정닡을 큰 λ¬Έμ œμ—μ„œλ„ μ‚¬μš©ν•  μˆ˜μžˆλ‹€.

πŸ“˜ μΆ”κ°€λ‘œ 곡뢀할 λ‚΄μš©

[udemy] React μ™„λ²½ κ°€μ΄λ“œ κ°•μ˜ 보기 (맀일 μ‘°κΈˆμ”© 이라도 κΎΈμ€€νžˆ λ“£κΈ°) (μ™„μ£Ό)

Study원과 ν•¨κ»˜ 진행쀑인 ν”„λ‘œμ νŠΈ κ΅¬ν˜„

pre-Project μ‚¬μ΄νŠΈ μ°ΎκΈ°

πŸ“ μ€‘μš”ν•œ λ‚΄μš©

  • μ•Œκ³ λ¦¬μ¦˜μ΄λž€?
  • μ‹œκ°„ λ³΅μž‘λ„
  • Big-O ν‘œκΈ°λ²•
  • 곡간 λ³΅μž‘λ„
  • 그리디 μ•Œκ³ λ¦¬μ¦˜
  • 브루트포슀 μ•Œκ³ λ¦¬μ¦˜

'Daily > Today I Learned' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

22.08.12_TIL  (0) 2022.08.12
22.08.11_TIL  (0) 2022.08.10
22.08.09_TIL  (0) 2022.08.09
22.08.08_TIL  (0) 2022.08.08
22.08.05_TIL  (0) 2022.08.05