λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Udemy

[μŠ€νƒ€νŠΈ μœ„λ“œ 유데미] - λΉ…μ˜€(Big O) ν‘œκΈ°λ²•μ˜ ν•„μš”μ„±

by vividmin 2022. 5. 8.
320x100

* 이 ν¬μŠ€νŒ…μ€ Start with Udemy μ±Œλ¦°μ €λ‘œμ¨ κ°•μ˜λ₯Ό μˆ˜κ°•ν•˜λ©° μž‘μ„±ν•˜λŠ” λ‚΄μš©μž…λ‹ˆλ‹€.😊 *

 

 

Section 2λ₯Ό μ‹œμž‘ν•˜λ©΄μ„œ

λ“œλ””μ–΄ μ†Œκ°œ 챕터 λ‹€μŒμΈ λΉ…μ˜€ ν‘œκΈ°λ²• νŒŒνŠΈλ₯Ό λ“€μ–΄λ³΄μ•˜λ‹€.
이번 μ±•ν„°λŠ” 총 1μ‹œκ°„ 2λΆ„μ§œλ¦¬μ˜€λŠ”λ° 유데미의 κ°•μ˜λŠ” 5λΆ„, 10λΆ„ μ •λ„μ˜ 길이둜 λ‚˜λˆ„μ–΄μ Έ μžˆμ–΄μ„œ 집쀑λ ₯이 쒋지 μ•Šμ•„λ„ λ“£κΈ°κ°€ νŽΈν–ˆλ‹€.

이 챕터가 μžλ°”μŠ€ν¬λ¦½νŠΈ μ•Œκ³ λ¦¬μ¦˜ & 자료ꡬ쑰 λ§ˆμŠ€ν„° 클래슀의 μˆ˜μ—…μ„ λ“£λŠ” 것에 μžˆμ–΄μ„œ 맀우 μ€‘μš”ν•œ μ‹œμž‘ 역할을 ν•œλ‹€κ³  ν•˜μ—¬ μ§‘μ€‘ν•΄μ„œ λ“€μ–΄λ³΄μ•˜λ‹€.

이번 νŒŒνŠΈμ—μ„œλŠ” λΉ…μ˜€μ˜ μ •μ˜, μ‹œκ°„ λ³΅μž‘λ„, 곡간 λ³΅μž‘λ„ κ°œλ…μ— λŒ€ν•΄μ„œ 배우게 λœλ‹€.
였늘 ν¬μŠ€νŒ…μ€ λΉ… 였의 μ •ν™•ν•œ ν‘œκΈ°λ°©λ²•μ— λŒ€ν•΄ μ•Œμ•„λ³΄κΈ° 전에 μ½”λ“œ μ„±λŠ₯ 비ꡐ가 μ™œ ν•„μš”ν•œμ§€μ— λŒ€ν•΄μ„œ ν¬μŠ€νŒ… 해볼것이닀. μ°¨κ·Όμ°¨κ·Ό μ‹œμž‘ν•΄λ³΄μž.

 

 

λΉ…μ˜€(Big O)κ°€ ν•„μš”ν•œ 이유 μ•Œμ•„λ³΄κΈ°

μ‹œμž‘λΆ€ν„° Warningμ΄λΌλŠ” κΈ€μžκ°€ λ‚˜μ™€μ„œ λ‹Ήν™©ν–ˆμ§€λ§Œ, λ†€λΌκ²Œ ν•˜λ €λŠ” 것이 μ•„λ‹ˆλΌ 격렀λ₯Ό ν•΄μ£ΌκΈ° μœ„ν•¨μ΄λΌκ³  ν•˜μ‹œλŠ” κ°•μ‚¬λ‹˜γ…‹γ…‹ μ€κ·Όνžˆ 유머감각이 μžˆμœΌμ‹  편인 것 κ°™λ‹€.

 

1. μ•Œκ³ λ¦¬μ¦˜ ν‰κ°€ν•˜λŠ” 방법 생각해보기

λΉ…μ˜€κ°€ 무엇인지 μ•Œλ €λ©΄ λ¨Όμ € μ•Œκ³ λ¦¬μ¦˜μ„ ν‰κ°€ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ 생각해보아야 ν•œλ‹€.

μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œκ°€ 있으면, λͺ¨λ“  μ‚¬λžŒμ΄ 같은 λ°©λ²•μœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€.
각자 λ‹€μ–‘ν•œ 방법을 μ‚¬μš©ν•˜μ—¬μ„œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€. 그런데 μ–΄λ–€ 방법이 κ°€μž₯ 쒋은 방법인지 μ•Œμ•„λ‚΄λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?πŸ€”

예λ₯Ό λ“€μ–΄ μ•„λž˜μ™€ 같은 λ¬Έμ œκ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

"λ¬Έμžμ—΄μ„ λ°›μ•„μ„œ 이것을 뒀집어 좜λ ₯ν•˜λŠ” function을 μ“°μ„Έμš”"

머릿속에 μ—¬λŸ¬κ°€μ§€ 해결책듀이 λ– μ˜€λ₯Ό 것이닀.
그리고 stack overflow에 검색을 해보아도 μ•„λž˜μ™€ 같은 μˆ˜λ§Žμ€ 결과듀이 λ‚˜μ˜¨λ‹€.

제일 쒋은 방법을 μ•Œμ•„λ‚΄λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒβ“
ν•˜λ‚˜ν•˜λ‚˜ 싀행해보기? 짧은 μ½”λ“œ κ³ λ₯΄κΈ°? 
이 κ²½μš°μ—λŠ” κ°„λ‹¨ν•œ μ˜ˆμ œμ΄λ―€λ‘œ κ·Έλ ‡κ²Œ ν•΄λ³Ό μˆ˜λ„ μžˆκ² μ§€λ§Œ, λ§Œμ•½ 맀우 λ³΅μž‘ν•œ μ½”λ“œμΌ κ²½μš°μ—λŠ” μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?
이럴 λ•Œλ₯Ό λŒ€λΉ„ν•΄μ„œ μ½”λ“œλ₯Ό λΆ„λ₯˜ν•  수 μžˆλŠ” μ‹œμŠ€ν…œμ΄ μžˆλ‹€λ©΄ μ–Όλ§ˆλ‚˜ μ’‹μ„κΉŒ?😒

λ°”λ‘œ 이런 점을 ν•΄κ²°ν•΄μ£ΌκΈ° μœ„ν•΄μ„œ λΉ…μ˜€κ°€ λ‚˜μ˜€κ²Œ λ˜μ—ˆλ‹€!

 

2. λΉ…μ˜€(Big O)λž€?

λ‹€μŒ κ°•μ˜κ°€ λ˜μ–΄μ•Ό μ •ν™•ν•œ κ°œλ…κ³Ό μ‚¬μš©λ°©λ²•μ„ μ•Œκ²Œ λ˜κ² μ§€λ§Œ,
μ§€κΈˆ κ°„λž΅νžˆ μ„€λͺ…ν•˜λ©΄ "μ—¬λŸ¬ 가지이닀.

μ΄λ ‡κ²Œ 색과 κ°μ •μœΌλ‘œ ν‘œμ‹œν•˜λŠ” 것은 μ•„λ‹ˆμ§€λ§Œ, 적어도 μ–΄λ–€ 것이 쒋은 μ½”λ“œμΈμ§€, μ–΄λ–€ μ½”λ“œκ°€ 엉망인 μ½”λ“œμΈμ§€ Big Oλ₯Ό μ‚¬μš©ν•˜λ©΄ ꡬ뢄할 수 μžˆλ‹€.πŸ˜†

그런데 이런 생각이 λ“€ μˆ˜λ„ μžˆλ‹€. μ½”λ“œκ°€ λŒμ•„κ°€κΈ°λ§Œ ν•˜λ©΄ λ˜μ§€... μ„±λŠ₯κΉŒμ§€ λ”°μ§ˆ ν•„μš”κ°€ μžˆλ‚˜?

μ–΄λ–»κ²Œλ“  λŒμ•„κ°€κΈ°λŠ”ν•˜λŠ” μ½”λ“œ


μ–΄λ–€ κ°„λ‹¨ν•œ μ½”λ“œμ—μ„œλŠ” 이런 생각이 틀리지 μ•Šμ„ μˆ˜λ„ μžˆλ‹€.
ν•˜μ§€λ§Œ λ³΅μž‘ν•œ μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜κ±°λ‚˜, νšŒμ‚¬μ—μ„œ μ–΄λ–€ 문제λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•˜λŠ” 상황이 μžˆλ‹€κ³  μƒκ°ν•΄λ³΄μž.

방법이 2가지가 μžˆλŠ” μƒν™©μ—μ„œ 1번 방법이 2번 방법보닀 1μ‹œκ°„μ΄ λΉ λ₯΄λ‹€λ©΄?
λΉ„μ¦ˆλ‹ˆμŠ€μ—μ„œ μ‹œκ°„μ€ 곧 λˆμ΄λ‹€.😱
문제 ν•˜λ‚˜μ— 1μ‹œκ°„μ΄λΌλ©΄ μ—¬λŸ¬ λ¬Έμ œκ°€ 합쳐진닀면 μ—„μ²­λ‚œ μ‹œκ°„ 차이가 λ°œμƒν•  것이고, 곧 λΉ„μš©κ³Ό 직결되며, μ΄λŠ” ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯과도 μ§κ²°λœλ‹€.
이처럼 μ½”λ“œμ˜ μ„±λŠ₯을 λ”°μ Έλ³΄λŠ” 일은 맀우 μ€‘μš”ν•˜λ‹€. 그런데 μ–΄λ–»κ²Œ ν•˜λ©΄ μ½”λ“œμ˜ μ„±λŠ₯을 λ”°μ Έλ³Ό 수 μžˆμ„κΉŒ?πŸ€”

 

3. μ½”λ“œ μ‹œκ°„ 재보기

μœ„μ˜ 두 가지 μ˜ˆμ‹œλ₯Ό μ†Œμš” μ‹œκ°„μ„ μΈ‘μ •ν•˜μ—¬ μ½”λ“œ μ„±λŠ₯을 λΉ„κ΅ν•΄λ³΄μž. μ†Œμš”μ‹œκ°„ λΉ„κ΅μ—λŠ” performance.now( )  ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€. μ½”λ“œ μ‹œμž‘ μ „κ³Ό ν›„μ˜ 차이λ₯Ό μ΄μš©ν•˜μ—¬ μ‹œκ°„μ„ κ΅¬ν•œλ‹€.

1.25μ΄ˆμ™€ 0.00010μ΄ˆκ°€ λ‚˜μ˜¨λ‹€. 즉 μ‹œκ°„ μ†Œμš”κ°€ 짧은 μ½”λ“œκ°€ 쒋은 μ½”λ“œλΌλ©΄ 였λ₯Έμͺ½μ˜ κ²½μš°κ°€ 더 쒋은 μ½”λ“œλΌκ³  ν•  수 μžˆλ‹€.
ν•˜μ§€λ§Œ, 맀번 μ½”λ“œλ§ˆλ‹€ performance.now( )λ₯Ό μ¨μ„œ μ‹œκ°„μ„ κ΅¬ν•΄λ³΄λŠ” 것은 λ„ˆλ¬΄ λΉ„νš¨μœ¨μ μ΄λ‹€. 그리고 μ‹œκ°„μœΌλ‘œ 비ꡐ μ‹œμ—λŠ” μ•„λž˜μ™€ 같은 문제점이 μžˆλ‹€.

  • κΈ°κΈ°λ§ˆλ‹€ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ μ‹œκ°„μ„ κΈ°λ‘ν•˜μ—¬ 였차 λ°œμƒ κ°€λŠ₯성이 μ‘΄μž¬ν•œλ‹€.
  • 같은 기기라도 μ‚¬μš©λ°©λ²•μ— 따라 λ‹€λ₯Έ μ‹œκ°„μ„ μΈ‘μ •ν•  수 μžˆμ–΄ μ˜€μ°¨κ°€ λ°œμƒν•œλ‹€.
  • 맀우 λΉ λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ˜ 경우, λ„ˆλ¬΄ 짧은 μ‹œκ°„μ΄ μΈ‘μ •λ˜μ–΄ 정확도가 λ–¨μ–΄μ§ˆ 수 μžˆλ‹€.

λ”°λΌμ„œ μ‹œκ°„ λΉ„κ΅λ§ŒμœΌλ‘œλŠ” μΆ©λΆ„ν•œ μ½”λ“œ μ„±λŠ₯ 비ꡐ방법이라고 λ³Ό 수 μ—†λ‹€.

 

4. μ—°μ‚°μ˜ 개수 세어보기

μ•žμ—μ„œ 봀듯이 μ‹œκ°„ 만으둜 μ½”λ“œ μ„±λŠ₯을 λΉ„κ΅ν•˜κΈ°μ—λŠ” 어렀움이 λ§Žλ‹€. 그럼 λ‹€λ₯Έ 방법은 μ–΄λ–€ 것이 μžˆμ„κΉŒ?
λ°”λ‘œ μ•„λž˜μ™€ 같이 μ—°μ‚°μ˜ 개수λ₯Ό 비ꡐ해 λ³΄λŠ” 방법이 μžˆλ‹€.

μœ„μ˜ μ˜ˆμ‹œλŠ” κ³±μ…ˆ, λ§μ…ˆ, λ‚˜λˆ—μ…ˆ 총 3번의 연산을 ν•œλ‹€.

for문이 μžˆλŠ” μœ„μ˜ μ˜ˆμ‹œμ˜ 경우, for 루프 μ•ˆμ˜ μ—°μ‚°κ³Ό 루프 λ°–μ˜ μ—°μ‚°μœΌλ‘œ λ‚˜λˆ„μ–΄μ„œ 생각할 수 μžˆλ‹€.
λ§Œμ•½ n이 5라면 5번, 10이라면 10번 μ΄λ ‡κ²Œ for loopμ•ˆμ˜ 연산은 n의 값에 λ”°λΌμ„œ λ³€ν•œλ‹€.
즉, n번의 연산을 ν•œλ‹€κ³  생각해야 μ˜³λ‹€. μœ„μ˜ μ˜ˆμ‹œλŠ” 총 5n + 2번의 연산을 ν•œλ‹€.

μ½”λ“œ μ„±λŠ₯을 비ꡐ할 λ•Œ 맀번 μ΄λ ‡κ²Œ μΈ‘μ •ν•΄μ•Ό ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€. μ€‘μš”ν•œ 것은 큰 그림으둜 생각해야 ν•œλ‹€λŠ” 점이닀.
3번과 5n + 2λ₯Ό λΉ„κ΅ν•˜λ©΄ n이 컀질수둝 5n + 2의 값이 컀지고, 아무리 μˆ«μžκ°€ λ°”λ€Œμ–΄λ„ 3번의 연산이 더 μž‘μœΌλ―€λ‘œ 이 방법이 더 쒋은 μ½”λ“œλΌκ³  λ³Ό 수 μžˆλ‹€.
ν•˜μ§€λ§Œ 5n + 2λ“ , 3n이든, 50n 이든 μ€‘μš”ν•œ 것은 연산에 n번이 λ“€μ–΄κ°„λ‹€λŠ” 점이닀. n이 컀질수둝 μ—°μ‚°μ˜ κ°œμˆ˜λ„ λΉ„λ‘€μ μœΌλ‘œ λŠ˜μ–΄λ‚œλ‹€.

 

κ²°λ‘ 
  • Big Oλž€ μ½”λ“œμ˜ μ„±λŠ₯을 λΉ„κ΅ν•˜κΈ° μœ„ν•΄μ„œ λ‚˜μ˜€κ²Œ 된 κ°œλ…μ΄λ‹€.
  • μ½”λ“œ μ†Œμš” μ‹œκ°„μœΌλ‘œλ§Œ λΉ„κ΅ν•˜λ©΄ 컴퓨터에 따라 λ‹€λ₯Έ 값이 λ‚˜μ˜€κ±°λ‚˜, 같은 기기라도 λ‹€λ₯Έ 결과값이 λ‚˜μ˜¬ 수 μžˆλŠ” λ“±μ˜ λ¬Έμ œκ°€ μžˆμ–΄μ„œ μ ν•©ν•˜μ§€ μ•Šλ‹€.
  • μ—°μ‚°μ˜ 개수둜 λΉ„κ΅ν•˜λŠ” 방법은 ν•˜λ‚˜ν•˜λ‚˜ 따지기보닀 큰 그림으둜 보아야 ν•œλ‹€.
  • 즉 2가지 방법을 ν•©μΉœ 방법이 ν•„μš”ν•˜λ‹€. (πŸ‘‰πŸ» Big O)

λ‹€μŒ ν¬μŠ€νŒ…λΆ€ν„° 본격적으둜 Big O의 μ‚¬μš©λ°©λ²•κ³Ό μ‹œκ°„ λ³΅μž‘λ„, 곡간 λ³΅μž‘λ„λ₯Ό κ΅¬ν•˜λŠ” 방법에 λŒ€ν•΄ 정리해볼 것이닀.

λ°˜μ‘ν˜•

λŒ“κΈ€