Updated:

Memeory

  • 1) 232 β‡’ 4GB**
  • 2) 216 β‡’ 64MB**

Time

ꡬ체적인 μ„±λŠ₯은 ν”Œλž«νΌμ˜ ν•˜λ“œμ›¨μ–΄μ— λ”°λΌμ„œ λ‹¬λΌμ§€κ² μ§€λ§Œ, 일반적으둜 1μ΄ˆμ— 1μ–΅λ²ˆ 정도 계산할 수 μžˆλ‹€κ³  κ°€μ •ν•˜κ³  μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ³„μ‚°ν•˜λ©΄ λœλ‹€. 즉, μ–΄λ–€ 문제의 μ‹œκ°„ μ œν•œμ΄ 2초라면, 2μ–΅λ²ˆ μ΄ν•˜μ˜ 계산을 ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ κ²½μš°λŠ” ν†΅κ³Όλ‘œ μ²˜λ¦¬λœλ‹€λŠ” 것이닀.

μ‹œκ°„ λ³΅μž‘λ„λŠ” μ›λž˜ 데이터 κ°œμˆ˜μ— λ”°λΌμ„œ λ‹¬λΌμ§€λŠ” μ—°μ‚° 횟수의 좔이λ₯Ό λ§ν•œλ‹€. ν•˜μ§€λ§Œ λ§Žμ€ μ‚¬λžŒλ“€μ€ νŽΈμ˜μƒ 데이터 κ°œμˆ˜μ™€ μ—°μ‚° 횟수λ₯Ό λ™μΉ˜λ‘œ κ°„μ£Όν•˜κ³  μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ³„μ‚°ν•˜κ³  μžˆλ‹€. μ΄λŸ¬ν•œ 접근이 ν‹€λ Έλ‹€κ³  보기 νž˜λ“  μ΄μœ λŠ” μ‹€μ „μ—μ„œ μ •ν™•ν•˜κ²Œ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ³„μ‚°ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ• μ΄ˆμ— μ‹œκ°„ λ³΅μž‘λ„μ˜ λͺ©μ μ€ λ‚΄κ°€ μ„Έμš΄ μ•Œκ³ λ¦¬μ¦˜μ˜ λŒ€λž΅μ μΈ μ„±λŠ₯을 μ•Œμ•„λ³΄κΈ° μœ„ν•¨μ΄μž, 문제 쑰건에 λ§žμ§€ μ•ŠλŠ” 경우의 수λ₯Ό 미리 μ²˜λ‚΄κΈ° μœ„ν•¨μ΄λ‹€. μ΄λŸ¬ν•œ 관점에 λ”°λΌμ„œ μ–΄λ–€ 문제의 μ‹œκ°„ μ œν•œμ΄ 2초, λ‚΄κ°€ μ„Έμš΄ μ•Œκ³ λ¦¬μ¦˜μ΄ O(N)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°–λŠ” 상황을 κ°€μ •ν•΄λ³΄μž. λ§Œμ•½ λ¬Έμ œμ—μ„œ μ£Όμ–΄μ§€λŠ” λ°μ΄ν„°μ˜ 양이 2μ–΅κ°œ μ΄ν•˜λΌλ©΄ μ‹œκ°„ μ΄ˆκ³Όμ— 걸리지 μ•Šκ³  톡과할 것이닀. ν•œνŽΈ, λ¬Έμ œμ—μ„œ μ£Όμ–΄μ§€λŠ” λ°μ΄ν„°μ˜ 양이 10μ–΅κ°œλΌλ©΄, μ„ ν˜• μ‹œκ°„ λ³΅μž‘λ„ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œλŠ” λ‹€μ‹œ νƒœμ–΄λ‚˜λ„ μ ˆλŒ€ 톡과할 수 μ—†λ‹€.

μ‹œκ°„ λ³΅μž‘λ„ μ΅œλŒ€ 데이터 길이 (1초)
O(log N) 1μ–΅**2
O(N) 1μ–΅
O(N**2) 1만
O(N log N) 30만
O(N**3) 500

이제 파이썬 λ‚΄μž₯ 라이브러리의 μ‹œκ°„ λ³΅μž‘λ„μ— λŒ€ν•΄μ„œ μ •λ¦¬ν•΄λ³΄μž. 파이썬의 κ°€μž₯ 큰 μž₯점은 타 μ–Έμ–΄ λŒ€λΉ„ λ‚΄μž₯ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ λ§Žλ‹€λŠ” 점이닀. κ·Έλž˜μ„œ λ‹€λ₯Έ μ–Έμ–΄λ‘œ κ΅¬ν˜„ν•  λ•Œλ³΄λ‹€ λ‚΄μž₯ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λΉˆλ²ˆν•˜κΈ° λ•Œλ¬Έμ— 미리 ν•΄λ‹Ή ν•¨μˆ˜λ“€μ˜ μ‹œκ°„ λ³΅μž‘λ„μ— λŒ€ν•΄μ„œ μˆ™μ§€ν•˜κ³  μžˆμ–΄μ•Ό ν•œλ‹€.

μ‹œκ°„ λ³΅μž‘λ„ μ΅œλŒ€ 데이터 길이 (1초)
O(1) λͺ¨λ“  인덱싱 ν™œμš© μ—°μ‚°(자료ꡬ쑰 길이 λ“±)
O(N) 전체 자료 ꡬ쑰 ν• λ‹Ή, 비ꡐ, 볡사, 탐색
O(N log N) μ •λ ¬(sort(), sorted())

μžλ£Œκ΅¬μ‘°μ— λ”°λ₯Έ λ‚΄μž₯ λ©”μ„œλ“œκ°€ λ„ˆλ¬΄ λ§Žμ•„μ„œ, μ΅œλŒ€ν•œ μΌλ°˜ν™”λœ ν‘œν˜„μœΌλ‘œ μž‘μ„±ν–ˆλ‹€. μ—¬κΈ°μ„œ ν•œ 가지 μ£Όλͺ©ν•  점은 자료ꡬ쑰 길이λ₯Ό κ΅¬ν•˜λŠ” len()의 μ‹œκ°„ λ³΅μž‘λ„κ°€ μƒμˆ˜ μ‹œκ°„μ΄λΌλŠ” 점이닀. 파이썬 mutable 객체듀은 λͺ¨λ‘ 내뢀값이 변경될 것을 κ°μ•ˆν•΄ resize() 연산을 객체 λ‚΄λΆ€ λ©”μ„œλ“œμ— 가지고 있고, 자료ꡬ쑰 내뢀에 길이 정보값을 항상 λ‚΄μž₯ν•˜κ³  μžˆλ‹€. κ·Έλž˜μ„œ len(), __len__() 을 ν˜ΈμΆœν•˜λ©΄ 자료ꡬ쑰λ₯Ό μˆœνšŒν•˜λ©΄μ„œ 길이λ₯Ό μ„ΈλŠ”κ²Œ μ•„λ‹ˆλΌ, 길이 정보값을 μ €μž₯ν•˜κ³  μžˆλŠ” μœ„μΉ˜μ˜ 배열값을 λ°˜ν™˜ν•œλ‹€. λ”°λΌμ„œ μƒμˆ˜ μ‹œκ°„μ— 해결이 κ°€λŠ₯ν•˜λ‹€. λ”°λΌμ„œ 파이썬 mutable 객체의 ν¬κΈ°λŠ” 우리 생각보닀 μ’€ 더 ν¬λ‹€λŠ” 것을 λͺ…μ‹¬ν•˜μž.

Leave a comment