μ•Œκ³ λ¦¬μ¦˜πŸ”

[μ•Œκ³ λ¦¬μ¦˜] μ•Œκ³ λ¦¬μ¦˜μ΄λž€?

eundeang 2023. 9. 11. 10:04

program은  μžλ£Œκ΅¬μ‘° + μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€. 

예λ₯Ό λ“€μ–΄ μ΅œλŒ€κ°’ 탐색 ν”„λ‘œκ·Έλž¨μ„ μ§ λ‹€κ³  ν•˜λ©΄ κ·Έ μ•ˆμ—λŠ” 탐색할 μš”μ†Œκ°€ λ‹΄κΈ΄ 자료ꡬ쑰(ex. List) + ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜(ex. μˆœμ°¨νƒμƒ‰)이 λ“€μ–΄μžˆμ„ 것이닀.

μ΄λ•Œ μžλ£Œκ΅¬μ‘°λŠ” μ‰¬μš΄ μ ‘κ·Όκ³Ό μˆ˜μ •μ„ μœ„ν•΄ 데이터λ₯Ό μ‘°μ§ν•˜κ³  μ €μž₯ν•˜λŠ” 방법이닀.

μžλ£Œκ΅¬μ‘°μ—λŠ” μ•„λž˜ ν‘œμ™€ 같이 크게 λ‹€μ„―κ°€μ§€κ°€ μžˆλ‹€.

List 
Stack
Queue
Tree
Graph 

μ•Œκ³ λ¦¬μ¦˜μ˜ 유래

μ•Œκ³ λ¦¬μ¦˜μ€ Al-Khowarizmi (μ•Œμ½°λ¦¬μ¦ˆλ―Έ)λΌλŠ” ν•œ μˆ˜ν•™μžμ˜ μ΄λ¦„μ—μ„œ μ°©μ•ˆλ˜μ—ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ˜ μ •μ˜

μ „ν˜•μ μœΌλ‘œ μž…λ ₯을 좜λ ₯으둜 λ³€ν™˜ν•˜λŠ” 일련의 계산 단계λ₯Ό μ˜λ―Έν•œλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ˜ 두가지 쑰건

  • μ •λ‹Ήμ„± - λͺ¨λ“  인풋에 λŒ€ν•˜μ—¬ μ •ν™•ν•œ 아웃풋이 λ‚˜μ˜€κ³  μ’…λ£Œλ˜μ–΄μ•Ό ν•œλ‹€. (λ¬΄ν•œλ£¨ν”„λŠ” μ •λ‹Ήν•˜μ§€ μ•ŠμŒ)
  • νš¨μœ¨μ„± -  λ§Žμ€ μ•Œκ³ λ¦¬μ¦˜ μ€‘μ—μ„œ μƒλŒ€μ μœΌλ‘œ νš¨μœ¨μ„±μ΄ 쒋은걸 μ„ νƒν•΄μ•Όν•œλ‹€.

효율적인 μ•Œκ³ λ¦¬μ¦˜μ˜ 예

  1. 물건을 사고 κ±°μŠ€λ¦„ λˆμ„ λ™μ „μœΌλ‘œλ§Œ λ°›μ•„μ•Όν•˜λŠ” μƒν™©μ—μ„œ κ°€μž₯ 적은 수의 동전을 받을 수 μžˆλŠ” 방법은? (단 , λ™μ „μœΌλ‘œλŠ” 500원 100원, 50원, 10원이 μ‚¬μš©λœλ‹€.
    • Greedy method : λ§€ 단계 κ°€λŠ₯ν•œ ν•΄λ“€ 쀑 κ°€μž₯ 쒋은 ν•΄λ₯Ό μ°ΎλŠ” 기법을 μ‚¬μš©ν•˜λ©΄ κ°€μž₯ 적은 수의 동전을 ꡬ할 수 μžˆλ‹€. 이 기법은 700원을 κ±°μŠ€λ¦„λˆμœΌλ‘œ
      • 항상 이 λ°©μ‹μœΌλ‘œ μ΄λŸ¬ν•œ λ¬Έμ œκ°€ ν’€λ¦¬λŠ” 것은 μ•„λ‹ˆλ‹€.  μ˜ˆλ₯Ό λ“€μ–΄ 180원을 κ±°μŠ€λ¦„λˆμœΌλ‘œ λ°›μ•„μ•Όν•˜λŠ”λ° 100원, 90원, 50원, 10원이 μžˆλ‹€κ³  ν•˜μž. μ΄λ•Œ μš°λ¦¬λŠ” 90원 2개둜 κ±°μŠ€λ¦„λˆμ„ ν•΄κ²°ν•  수 μžˆμ§€λ§Œ, 그리디 λ°©λ²•μœΌλ‘œ μ°ΎλŠ”λ‹€λ©΄ 100원 1개 10원 8개둜 총 μ•„ν™‰κ°œμ˜ 동전을 λ°›κ²Œλœλ‹€. 
      • 그리디 λ°©λ²•μœΌλ‘œ ν•΄κ²°ν•˜λ €λ©΄ 동전과 동전 μ‚¬μ΄μ˜ 관계가 μ•½μˆ˜κ΄€κ³„μ—¬μ•Ό ν•œλ‹€.
  2. μ—„μ²­ λ§Žμ€ n개의 동전이 있고, κ·Έ 속에 κ°€μ§œ 동전이 μ„žμ—¬μžˆλ‹€. 이 κ°€μ§œ 동전은 맀우 μ •κ΅ν•˜κ²Œ λ§Œλ“€μ–΄μ Έμ„œ λˆˆμœΌλ‘œλŠ” κ°€κΉŒμΈμ§€ 식별할 수 μ—†μ§€λ§Œ, λ¬΄κ²Œκ°€ 정상적인 동전보닀 μ•½κ°„ κ°€λ²Όμ›Œ. 1개의 μ–‘νŒ” μ €μšΈλ§Œμ„ μ‚¬μš©ν•΄μ„œ 이 κ°€μ§œ 동전을 μ΅œμ†Œν•œμ˜ μ €μšΈμ§ˆλ‘œ μ°Ύμ•„λ‚Ό 수 μžˆλŠ” 방법은?
    • Divide and conquer : μ£Όμ–΄μ§„ 문제의 μž…λ ₯을 λΆ„ν• ν•΄ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 기법 
      • 짝수라면 동전듀을 절반으둜 λ‚˜λˆ μ„œ κ°€λ²Όμš΄ μͺ½μ˜ 뢄할을 λ°˜λ³΅ν•œλ‹€.
      • ν™€μˆ˜λΌλ©΄ 동전을 ν•˜λ‚˜λΉΌκ³  μ ˆλ°˜μ„ λ‚˜λˆ μ„œ κ°€λ²Όμš΄ μͺ½μ˜ 뢄할을 λ°˜λ³΅ν•œλ‹€. (μ΄λ•Œ 두 λ™μ „κΎΈλŸ¬λ―Έμ˜ λ¬΄κ²Œκ°€ κ°™μœΌλ©΄ 빼놓은 동전이 κ°€μ§œμ΄λ‹€.)