λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Knowledge/Algorithm

[Algorithm]μ•Œκ³ λ¦¬μ¦˜μ˜ κ°œμš”μ™€ μ„±λŠ₯뢄석: 초보자λ₯Ό μœ„ν•œ μ™„λ²½ κ°€μ΄λ“œ

by YJ Dev 2024. 7. 15.
728x90
λ°˜μ‘ν˜•
SMALL

μ•Œκ³ λ¦¬μ¦˜μ€ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰λ˜λŠ” μ ˆμ°¨λ‚˜ λ‹¨κ³„μ˜ μ§‘ν•©μž…λ‹ˆλ‹€. 컴퓨터 κ³Όν•™μ—μ„œ μ•Œκ³ λ¦¬μ¦˜μ€ 주어진 μž…λ ₯을 νŠΉμ • 좜λ ₯으둜 λ³€ν™˜ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. μ•Œκ³ λ¦¬μ¦˜μ€ μ†Œν”„νŠΈμ›¨μ–΄ 개발의 ν•΅μ‹¬μž…λ‹ˆλ‹€. 효율적인 μ•Œκ³ λ¦¬μ¦˜μ€ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 크게 ν–₯상할 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, μ•Œκ³ λ¦¬μ¦˜μ„ μ΄ν•΄ν•˜κ³  λΆ„μ„ν•˜λŠ” λŠ₯λ ₯은 ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. 이 글은 μ•Œκ³ λ¦¬μ¦˜μ˜ κΈ°λ³Έ κ°œλ…κ³Ό μ„±λŠ₯뢄석 방법을 μ†Œκ°œν•˜μ—¬ μ΄ˆλ³΄μžλ“€λ„ μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ 돕기 μœ„ν•΄ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

자료ꡬ쑰 μ„±λŠ₯뢄석


01. μ•Œκ³ λ¦¬μ¦˜μ˜ κ°œμš”πŸ“š

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

μ•Œκ³ λ¦¬μ¦˜μ€ νŠΉμ • 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λͺ…ν™•ν•œ μ ˆμ°¨μž…λ‹ˆλ‹€. μ•Œκ³ λ¦¬μ¦˜μ€ μœ ν•œν•œ 단계λ₯Ό 거쳐 κ²°κ³Όλ₯Ό λ„μΆœν•΄μ•Ό ν•©λ‹ˆλ‹€.

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

μ•Œκ³ λ¦¬μ¦˜μ΄λΌλŠ” μš©μ–΄λŠ” 페λ₯΄μ‹œμ•„ μˆ˜ν•™μž μ•Œμ½°λ¦¬μ¦ˆλ―Έ(Al-Khwarizmi)의 μ΄λ¦„μ—μ„œ μœ λž˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 그의 μ €μ„œμ—μ„œ 유래된 이 μš©μ–΄λŠ” ν˜„λŒ€ 컴퓨터 κ³Όν•™μ—μ„œ 널리 μ‚¬μš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

일상 μƒν™œμ—μ„œμ˜ μ•Œκ³ λ¦¬μ¦˜ μ˜ˆμ‹œ

  • μš”λ¦¬ λ ˆμ‹œν”Ό: λ‹¨κ³„λ³„λ‘œ λͺ…ν™•ν•œ μ§€μ‹œμ‚¬ν•­μ„ λ”°λ¦…λ‹ˆλ‹€.
  • κΈΈ μ°ΎκΈ°: μ‹œμž‘ μ§€μ μ—μ„œ λͺ©μ μ§€κΉŒμ§€ 졜적의 경둜λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

02. μ•Œκ³ λ¦¬μ¦˜μ˜ μ’…λ₯˜πŸ§©

λΆ„λ₯˜ 기쀀에 λ”°λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ˜ μ’…λ₯˜

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

  • 버블 μ •λ ¬: μΈμ ‘ν•œ 두 μ›μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ μ •λ ¬ν•˜λŠ” λ‹¨μˆœν•œ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.
  • 퀡 μ •λ ¬: λΆ„ν•  정볡 기법을 μ΄μš©ν•˜μ—¬ 리슀트λ₯Ό λΉ λ₯΄κ²Œ μ •λ ¬ν•©λ‹ˆλ‹€.

탐색 μ•Œκ³ λ¦¬μ¦˜

  • 이진 탐색: μ •λ ¬λœ λ¦¬μŠ€νŠΈμ—μ„œ 쀑간 값을 κΈ°μ€€μœΌλ‘œ 탐색 λ²”μœ„λ₯Ό 반으둜 쀄여가며 μ°ΎμŠ΅λ‹ˆλ‹€.
  • μ„ ν˜• 탐색: 리슀트의 μ²˜μŒλΆ€ν„° λκΉŒμ§€ 순차적으둜 νƒμƒ‰ν•©λ‹ˆλ‹€.

κ·Έλž˜ν”„ μ•Œκ³ λ¦¬μ¦˜

  • λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜: κ°€μ€‘μΉ˜ κ·Έλž˜ν”„μ—μ„œ μ΅œλ‹¨ 경둜λ₯Ό μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.
  • A μ•Œκ³ λ¦¬μ¦˜*: νœ΄λ¦¬μŠ€ν‹±μ„ μ΄μš©ν•œ μ΅œλ‹¨ 경둜 탐색 μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.

03. μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯뢄석 πŸ“ˆ

μ„±λŠ₯λΆ„μ„μ˜ ν•„μš”μ„±

μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯을 λΆ„μ„ν•˜λŠ” 것은 효율적인 ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜κΈ° μœ„ν•΄ μ€‘μš”ν•©λ‹ˆλ‹€. μ„±λŠ₯ 뢄석을 톡해 μ•Œκ³ λ¦¬μ¦˜μ˜ μž₯단점을 νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„

λΉ…μ˜€ ν‘œκΈ°λ²• (Big-O Notation)

λΉ…μ˜€ ν‘œκΈ°λ²•μ€ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. 주둜 μ΅œμ•…μ˜ 경우 μ„±λŠ₯을 ν‰κ°€ν•©λ‹ˆλ‹€.

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

  • O(1): μƒμˆ˜ μ‹œκ°„ λ³΅μž‘λ„. μž…λ ₯ 크기에 상관없이 μΌμ •ν•œ μ‹œκ°„μ΄ μ†Œμš”λ©λ‹ˆλ‹€.
  • O(n): μ„ ν˜• μ‹œκ°„ λ³΅μž‘λ„. μž…λ ₯ 크기에 λΉ„λ‘€ν•˜μ—¬ μ‹œκ°„μ΄ μ¦κ°€ν•©λ‹ˆλ‹€.
  • O(n^2): 이차 μ‹œκ°„ λ³΅μž‘λ„. μž…λ ₯ 크기에 λŒ€ν•΄ 제곱의 μ‹œκ°„μ΄ μ†Œμš”λ©λ‹ˆλ‹€.

곡간 λ³΅μž‘λ„ μ˜ˆμ‹œ

μ•Œκ³ λ¦¬μ¦˜μ΄ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 양을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μž…λ ₯ 크기에 λΉ„λ‘€ν•˜κ±°λ‚˜ μΌμ •ν•œ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„± 평가 방법

  • μ΅œμ„  경우: κ°€μž₯ 이상적인 μƒν™©μ—μ„œμ˜ μ„±λŠ₯μž…λ‹ˆλ‹€.
  • μ΅œμ•… 경우: κ°€μž₯ λΉ„νš¨μœ¨μ μΈ μƒν™©μ—μ„œμ˜ μ„±λŠ₯μž…λ‹ˆλ‹€.
  • 평균 경우: 일반적인 μƒν™©μ—μ„œμ˜ μ„±λŠ₯μž…λ‹ˆλ‹€.

04. μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯ κ°œμ„  λ°©λ²•πŸ› οΈ

μ΅œμ ν™” 기법

μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯을 높이기 μœ„ν•΄ μ—¬λŸ¬ μ΅œμ ν™” 기법을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λΆˆν•„μš”ν•œ 연산을 μ€„μ΄κ±°λ‚˜ 데이터 ꡬ쑰λ₯Ό 효율적으둜 λ³€κ²½ν•˜λŠ” 방법 등이 μžˆμŠ΅λ‹ˆλ‹€.

데이터 ꡬ쑰의 선택

μ μ ˆν•œ 데이터 ꡬ쑰λ₯Ό μ„ νƒν•˜λŠ” 것은 μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯에 큰 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ°°μ—΄ λŒ€μ‹  μ—°κ²° 리슀트λ₯Ό μ‚¬μš©ν•˜λ©΄ νŠΉμ • μž‘μ—…μ—μ„œ μ„±λŠ₯이 κ°œμ„ λ  수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ μ΅œμ ν™”

μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•  λ•Œ μ½”λ“œλ₯Ό μ΅œμ ν™”ν•˜λŠ” 것도 μ€‘μš”ν•œ λΆ€λΆ„μž…λ‹ˆλ‹€. μ½”λ“œμ˜ 쀑볡을 쀄이고, 효율적인 연산을 μ‚¬μš©ν•˜μ—¬ μ„±λŠ₯을 ν–₯상할 수 μžˆμŠ΅λ‹ˆλ‹€.

728x90
λ°˜μ‘ν˜•