μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

[λ°μ΄ν„°μ»΄ν“¨νŒ…] 2회차 μˆ˜μ—…, 파이썬 기초(2)와 μ‹œκ°„λ³΅μž‘λ„

HotSky92 2025. 3. 24. 12:23

πŸš€ μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯ 뢄석: μ‹œκ°„ λ³΅μž‘λ„(Time Complexity) κ°œλ… 정리

πŸ“š λ°°κ²½ (Background)

μ•Œκ³ λ¦¬μ¦˜κ³Ό 데이터 ꡬ쑰의 기초λ₯Ό λ‹€λ£¨λ©΄μ„œ,

특히 μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„± 뢄석을 μœ„ν•œ 핡심 도ꡬ인
μ‹œκ°„ λ³΅μž‘λ„(Time Complexity) κ°œλ…μ„ μ€‘μ μ μœΌλ‘œ λ°°μ› λ‹€.

ν‰μ†Œμ—λŠ” λ§‰μ—°ν•˜κ²Œ '반볡문이 많으면 λŠλ¦¬λ‹€' μ •λ„λ‘œλ§Œ μ΄ν•΄ν–ˆμ—ˆλŠ”λ°,

μˆ˜μ—…μ„ 톡해 보닀 μžμ„Έν•˜κ²Œ κ°œλ…μ„ 이해할 수 있게 λ˜μ—ˆλ‹€.


1️⃣ μ•Œκ³ λ¦¬μ¦˜κ³Ό λ³΅μž‘λ„μ˜ μ •μ˜

βœ” μ•Œκ³ λ¦¬μ¦˜(Algorithm)μ΄λž€?

  • μ£Όμ–΄μ§„ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λͺ…ν™•ν•˜κ³  순차적인 절차λ₯Ό μ˜λ―Έν•œλ‹€.
  • μš”λ¦¬λ²•(λ ˆμ‹œν”Ό)에 λΉ„μœ ν•  수 있으며, μ•Œκ³ λ¦¬μ¦˜μ„ μ½”λ”© μ–Έμ–΄λ‘œ κ΅¬ν˜„ν•˜λŠ” 것이 ν”„λ‘œκ·Έλž˜λ°μ΄λ‹€.

βœ” λ³΅μž‘λ„(Complexity)λž€?

  • μ•Œκ³ λ¦¬μ¦˜μ΄ 문제λ₯Ό ν•΄κ²°ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μžμ›μ˜ 양을 λ‚˜νƒ€λ‚Έλ‹€.
  • 보톡 μ‹œκ°„ λ³΅μž‘λ„(Time Complexity)와 곡간 λ³΅μž‘λ„(Space Complexity)둜 λ‚˜λˆˆλ‹€.

2️⃣ μ‹œκ°„ λ³΅μž‘λ„(Time Complexity) κ°œλ…

βœ” μ •μ˜

  • μ•Œκ³ λ¦¬μ¦˜μ΄ μž…λ ₯(input)의 크기(일반적으둜 N으둜 ν‘œν˜„λ¨)에 따라
    문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„(ν˜Ήμ€ μ‹€ν–‰ 횟수)의 μ¦κ°€μœ¨μ„ λ‚˜νƒ€λ‚΄λŠ” κ°œλ…μ΄λ‹€.
  • μ •ν™•ν•œ μ‹€ν–‰ μ‹œκ°„μ΄ μ•„λ‹ˆλΌ, μž…λ ₯의 크기(N)κ°€ 증가할 λ•Œ μ‹€ν–‰ 횟수의 증가 양상을 λ³΄λŠ” 것이 핡심이닀.

βœ” ν‘œκΈ° 방법 (Big-O Notation)

  • 일반적으둜 O( )둜 ν‘œν˜„ν•œλ‹€.
  • μƒμˆ˜ν•­κ³Ό κ³„μˆ˜λŠ” λ¬΄μ‹œν•˜κ³  κ°€μž₯ λΉ λ₯΄κ²Œ μ¦κ°€ν•˜λŠ” ν•­λ§Œμ„ ν‘œν˜„ν•œλ‹€.
    • μ˜ˆμ‹œ: 3N² + 5N + 100 → O(N²)

3️⃣ μ‹€ν–‰ 횟수(Number of Executions)μ™€μ˜ 차이점

ꡬ뢄 μ‹€ν–‰ 횟수(Number of Executions) μ‹œκ°„ λ³΅μž‘λ„(Time Complexity)

κ°œλ… μ‹€μ œ μ½”λ“œκ°€ μ‹€ν–‰λœ μ •ν™•ν•œ 횟수 μž…λ ₯의 크기(N)κ°€ 증가할 λ•Œ μ‹€ν–‰ 횟수의 증가 νŒ¨ν„΄
ν‘œν˜„ 방법 μ •ν™•ν•œ μ •μˆ˜ (예: 10, 100, 1000번) Big-O ν‘œκΈ°λ²• (예: O(N), O(N²), O(logN))
μ‚¬μš© λͺ©μ  μ‹€μ œ μˆ˜ν–‰ 횟수 νŒŒμ•… 및 디버깅 μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯ 뢄석 및 νš¨μœ¨μ„± 비ꡐ

4️⃣ 자주 λ“±μž₯ν•˜λŠ” μ‹œκ°„ λ³΅μž‘λ„μ˜ 예

ν‘œκΈ° μ„€λͺ… μ˜ˆμ‹œ μ½”λ“œ

O(1) μƒμˆ˜ μ‹œκ°„(Constant Time) λ°°μ—΄μ˜ μ›μ†Œ μ ‘κ·Ό (arr[0])
O(log N) 둜그 μ‹œκ°„(Logarithmic Time) 이진 탐색(Binary Search)
O(N) μ„ ν˜• μ‹œκ°„(Linear Time) 단일 반볡문(for i in range(N))
O(N²) 제곱 μ‹œκ°„(Quadratic Time) 이쀑 반볡문(for i in range(N): for j in range(N))
O(2ⁿ) μ§€μˆ˜ μ‹œκ°„(Exponential Time) ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄ μž¬κ·€ κ΅¬ν˜„

 

5️⃣ μ‹œκ°„ λ³΅μž‘λ„λ³„ μ˜ˆμ‹œμ™€ 뢄석


βœ… (1) O(1) - μƒμˆ˜ μ‹œκ°„ (Constant Time)

  • μž…λ ₯ 크기(N)와 λ¬΄κ΄€ν•˜κ²Œ 항상 λ™μΌν•œ μ‹œκ°„μ΄ κ±Έλ¦°λ‹€.
  • λ°°μ—΄μ—μ„œ νŠΉμ • μš”μ†Œλ₯Ό 직접 μ ‘κ·Όν•˜λŠ” κ²½μš°κ°€ λŒ€ν‘œμ μ΄λ‹€.

βœ… (2) O(log N) - 둜그 μ‹œκ°„ (Logarithmic Time)

  • μž…λ ₯ 크기(N)κ°€ λŠ˜μ–΄λ‚˜λ„ μ‹€ν–‰ νšŸμˆ˜κ°€ 느리게 증가 (둜그 λΉ„μœ¨)
  • μž…λ ₯ 크기(N)κ°€ 2λ°°, 4λ°°, 8배둜 λŠ˜μ–΄λ‚˜λ„ μ‹€ν–‰ νšŸμˆ˜λŠ” 1, 2, 3μ”© μ•„μ£Ό μ‘°κΈˆμ”© μ¦κ°€ν•˜λŠ” λ°©μ‹μœΌλ‘œ 맀우 νš¨μœ¨μ μ΄λ‹€.

βœ… (3) O(N) - μ„ ν˜• μ‹œκ°„ (Linear Time)

  • μž…λ ₯ 크기(N)와 μ •ν™•νžˆ λΉ„λ‘€ν•˜μ—¬ μ‹€ν–‰ νšŸμˆ˜κ°€ μ¦κ°€ν•œλ‹€.
  • μž…λ ₯이 10λ°° 컀지면 μ‹€ν–‰ μ‹œκ°„λ„ μ •ν™•νžˆ 10λ°°κ°€ λœλ‹€.

βœ… (4) O(N log N) - μ„ ν˜• 둜그 μ‹œκ°„ (Linearithmic Time)

  • μž…λ ₯ 크기(N)κ°€ λŠ˜μ–΄λ‚¨μ— 따라 N × log N의 μ†λ„λ‘œ μ¦κ°€ν•œλ‹€.
  • λŒ€ν‘œμ μœΌλ‘œ 병합정렬(Merge Sort), νž™ μ •λ ¬(Heap Sort)이 이에 ν•΄λ‹Ήλœλ‹€.

βœ… (5) O(N²) - 제곱 μ‹œκ°„ (Quadratic Time)

  • μž…λ ₯ 크기(N)의 제곱 λΉ„μœ¨λ‘œ μ‹€ν–‰ νšŸμˆ˜κ°€ μ¦κ°€ν•œλ‹€.
  • μž…λ ₯ 크기가 10λ°° λŠ˜μ–΄λ‚˜λ©΄ μ‹€ν–‰ μ‹œκ°„μ€ μ•½ 100λ°° λŠ˜μ–΄λ‚œλ‹€. 주둜 쀑첩 λ°˜λ³΅λ¬Έμ—μ„œ ν”νžˆ λ‚˜νƒ€λ‚œλ‹€.

βœ… (6) O(N³) - μ„Έμ œκ³± μ‹œκ°„ (Cubic Time)

  • μž…λ ₯ 크기(N)의 3제곱 λΉ„μœ¨λ‘œ μ¦κ°€ν•œλ‹€.
  • μž…λ ₯ 크기가 10λ°° λŠ˜μ–΄λ‚˜λ©΄ μ‹€ν–‰ μ‹œκ°„μ€ μ•½ 1000λ°° λŠ˜μ–΄λ‚œλ‹€.

βœ… (7) O(2ⁿ) - μ§€μˆ˜ μ‹œκ°„ (Exponential Time)

  • μž…λ ₯ 크기(N)κ°€ 쑰금만 컀져도 μ‹€ν–‰ νšŸμˆ˜κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•œλ‹€.
  • μ•Œκ³ λ¦¬μ¦˜ μ΅œμ ν™”κ°€ λ°˜λ“œμ‹œ ν•„μš”ν•œ μΌ€μ΄μŠ€λ‹€. μž‘μ€ μž…λ ₯ ν¬κΈ°μ—μ„œλ„ 맀우 λŠλ¦¬λ‹€.

🎯 λ³΅μž‘λ„λ³„ μ‹œκ°„ μ¦κ°€μœ¨ μš”μ•½ν‘œ

  • λ³΅μž‘λ„μž…λ ₯ 크기 N이 10λ°° 증가할 λ•Œμ£Όμš” μ˜ˆμ‹œ
    O(1) λ³€ν™” μ—†μŒ λ°°μ—΄ μ ‘κ·Ό
    O(log N) 맀우 느린 증가 이진 탐색
    O(N) μ •ν™•νžˆ 10λ°° 증가 단일 반볡문
    O(N log N) μ•½ 10배보닀 쑰금 더 크게 증가 병합 μ •λ ¬, 퀡 μ •λ ¬
    O(N²) μ•½ 100λ°° 증가 이쀑 반볡문
    O(N³) μ•½ 1000λ°° 증가 삼쀑 반볡문
    O(2ⁿ) κΈ°ν•˜κΈ‰μˆ˜μ  증가 μž¬κ·€ ν”Όλ³΄λ‚˜μΉ˜
  • μ‹œκ°„ λ³΅μž‘λ„λŠ” 'μ„±λŠ₯ 평가λ₯Ό μœ„ν•œ 이둠적 μ§€ν‘œ'이며, μ‹€μ œ μ„±λŠ₯ ν…ŒμŠ€νŠΈμ™€ λ³‘ν–‰ν•˜μ—¬
    μ•Œκ³ λ¦¬μ¦˜ νš¨μœ¨μ„±μ„ νŒλ‹¨ν•˜λŠ” μ€‘μš”ν•œ 기쀀이 λœλ‹€.