π νμ΄μ¬ μΌλ‘ νμ΄
π λ¬Έμ λ§ν¬ :
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
π λ¬Έμ μ€λͺ :
μ§λκ°λ°νμμ 근무νλ μ μ΄μ§λ μ§λμμ λμ μ΄λ¦μ κ²μνλ©΄ ν΄λΉ λμμ κ΄λ ¨λ λ§μ§ κ²μλ¬Όλ€μ λ°μ΄ν°λ² μ΄μ€μμ μ½μ΄ 보μ¬μ£Όλ μλΉμ€λ₯Ό κ°λ°νκ³ μλ€.
μ΄ νλ‘κ·Έλ¨μ ν
μ€ν
μ
무λ₯Ό λ΄λΉνκ³ μλ μ΄νΌμΉλ μλΉμ€λ₯Ό μ€ννκΈ° μ κ° λ‘μ§μ λν μ±λ₯ μΈ‘μ μ μννμλλ°, μ μ΄μ§κ° μμ±ν λΆλΆ μ€ λ°μ΄ν°λ² μ΄μ€μμ κ²μλ¬Όμ κ°μ Έμ€λ λΆλΆμ μ€νμκ°μ΄ λ무 μ€λ κ±Έλ¦°λ€λ κ²μ μκ² λμλ€.
μ΄νΌμΉλ μ μ΄μ§μκ² ν΄λΉ λ‘μ§μ κ°μ νλΌκ³ λ¦λ¬νκΈ° μμνμκ³ , μ μ΄μ§λ DB μΊμλ₯Ό μ μ©νμ¬ μ±λ₯ κ°μ μ μλνκ³ μμ§λ§ μΊμ ν¬κΈ°λ₯Ό μΌλ§λ‘ ν΄μΌ ν¨μ¨μ μΈμ§ λͺ°λΌ λκ°ν μν©μ΄λ€.
μ΄νΌμΉμκ² μλ¬λ¦¬λ μ μ΄μ§λ₯Ό λμ, DB μΊμλ₯Ό μ μ©ν λ μΊμ ν¬κΈ°μ λ°λ₯Έ μ€νμκ° μΈ‘μ νλ‘κ·Έλ¨μ μμ±νμμ€.
π μ ν μ¬ν
- μΊμ ν¬κΈ°(cacheSize)μ λμμ΄λ¦ λ°°μ΄(cities)μ μ λ ₯λ°λλ€.
- cacheSizeλ μ μμ΄λ©°, λ²μλ 0 β¦ cacheSize β¦ 30 μ΄λ€.
- citiesλ λμ μ΄λ¦μΌλ‘ μ΄λ€μ§ λ¬Έμμ΄ λ°°μ΄λ‘, μ΅λ λμ μλ 100,000κ°μ΄λ€.
- κ° λμ μ΄λ¦μ 곡백, μ«μ, νΉμλ¬Έμ λ±μ΄ μλ μλ¬Έμλ‘ κ΅¬μ±λλ©°, λμλ¬Έμ ꡬλΆμ νμ§ μλλ€. λμ μ΄λ¦μ μ΅λ 20μλ‘ μ΄λ£¨μ΄μ Έ μλ€.
π μΆλ ₯ νμ
- μ λ ₯λ λμμ΄λ¦ λ°°μ΄μ μμλλ‘ μ²λ¦¬ν λ, "μ΄ μ€νμκ°"μ μΆλ ₯νλ€.
π 쑰건
- μΊμ κ΅μ²΄ μκ³ λ¦¬μ¦μ LRU(Least Recently Used)λ₯Ό μ¬μ©νλ€.
- cache hitμΌ κ²½μ° μ€νμκ°μ 1μ΄λ€.
- cache missμΌ κ²½μ° μ€νμκ°μ 5μ΄λ€.
π μ μΆλ ₯ μ

μΆμΈ‘)
μ μ΄λ² λ¬Έμ λ μΌλ¨ μΊμ κ΅μ²΄ μκ³ λ¦¬μ¦ LRU(Least Recently Used) μ΄κ±° λΆν° μμμΌ ν κ±° κ°μμ 곡λΆ!
LRUλ νμ΄μ§ κΈ°λ²μΌλ‘ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ μ΄μ체μ μμ νμ΄μ§ λΆμ¬κ° λ°μνμ λ μλ‘μ΄ νμ΄μ§λ₯Ό ν λΉνκΈ° μν΄ νμ¬ ν λΉλ νμ΄μ§ μ€ μ΄λκ²κ³Ό κ΅μ²΄ ν μ§λ₯Ό κ²°μ νλ λ°©λ²μ΄λ€.
LRUλ κ°μ₯ μ€λ«λμ μ°Έμ‘°λμ§ μμ νμ΄μ§λ₯Ό κ΅μ²΄νλ λ°©μμ λ§νλ€.
μμλ‘
cacheSize = 3
cities = ["Jeju", "Pangyo", "Seoul", "Jeju", "New york", "Seoul", "Busan", "Chuncheon", "Jeju"]
| 1 | 2 | 3 | 4 | 5 |
| Jeju | Jeju | Jeju | Jeju | Jeju |
| Pangyo | Pangyo | Pangyo | New york | |
| Seoul | Seoul | Seoul |
- μΌλ¨ μ²μ Jejuλ₯Ό μ°Έμ‘°λ₯Ό νλ €κ³ νλλ° νμ΄μ§λ€μ΄ ν
ν
λΉμ΄μλ€. (cache miss λ°μ, μκ°+5 = μ΄μκ° 5)
Jejuλ₯Ό ν λΉνλ€. - Pangyo λν μλ€ (cache miss λ°μ, μκ°+5 = μ΄μκ° 10)
- Seoul λν μλ€ (cache miss λ°μ, μκ°+5 = μ΄μκ° 15)
- νμ΄μ§λ€ 3κ°κ° ν λΉλκ³ λμ Jejuλ₯Ό μ‘°ννλ € νλ μ€! μΌμΉνλ κ² μλ€. (cache hit λ°μ, μκ°+1 = μ΄μκ° 16)
μ΄λ―Έ μΊμ±λμ΄ μλκ±Έ μ°Έμ‘°νμΌλ νμ΄μ§μ λ³νλ μλ€. - μ΄μ New yorkμ μ‘°ννλ € νλλ° νμ΄μ§μ New yorkμ΄ μλ€. (cache miss λ°μ, μκ°+5 = μ΄μκ° 21)
μ΄μ λΆν°κ° λ¬Έμ μΈλ° μ¬κΈ°μ New yorkμ μλ‘μ΄ νμ΄μ§λ‘ ν λΉμ ν΄μ€μΌ νλλ° μ΄λ€κ±°λ λ°κΎΈμ§? κ° μ€μνκ±°λ€.
κ·Έλ¦¬κ³ μ‘°κ±΄μμ κ·Έκ±Έ LRUλ‘ μ ν΄μ€κ±°κ³ .. LRUλ κ°μ₯ μ€λ«λμ μ°Έμ‘°λμ§ μμ νμ΄μ§λ κ΅μ²΄νλ μκ³ λ¦¬μ¦μΌλ‘ νμ΄μ§λ€ μ€ κ°μ₯ μ€λλ νμ΄μ§λ₯Ό μ°Ύλλ€.
Jejuκ° λ¨Όμ λ€μ΄μμΌλ Jejuκ° κ°μ₯ μ€λλ κ±ΈκΉ? No! 4λ²μμ Jejuλ νλ² μλ‘κ² μ°Έμ‘°λμ΄ μκ°μ΄ κ°±μ λ¬λ€. κ·Έλμ νμ¬ κ°μ₯ 빨리 μ°Έμ‘°λ νμ΄μ§λ‘ λ°λμ΄ κ²°κ΅ 2λ²μ§Έλ‘ λ€μ΄μ νλ²λ μ°Έμ‘° μλ Pangyoκ° κ°μ₯ μ€λλ νμ΄μ§κ° λλ€.
λ°λΌμ Pangyo > New yorkμ΄ λλ€.
μ΄λ°μμΌλ‘ μΊμκ° λΉμ΄μμ λ λͺ¨λ μ±μμ£Όκ³ , λͺ¨λ μ±μμ§ μ΄νμλ μ΅κ·Ό μ°Έμ‘°λ μκ°μ λΉκ΅ν΄ κ΅μ²΄ν΄μ£Όλ λ°©μμΌλ‘ μ§ννλ©΄ λλ€.
μ΄κ±Έ μ΄μ λ‘μ§μΌλ‘ μ§λ³΄μ.
λ°°μ΄μ μ¬μ©ν΄ λ°°μ΄μ΄ 0λ²μ΄ κ°μ₯ μ€λλ νμ΄μ§μ ν΄λΉνλλ‘ μ§λ³΄λ €κ³ νλ€.
- + μΊμκ° 0μ΄λ©΄ cities μλ§νΌ *5 ν΄μ λ°λ‘ 리ν΄
- μΌλ¨ λΉ μΊμ λ°°μ΄μ νλ λ§λ λ€.
- citiesλ‘ forλ¬Έμ λλ¦°λ€.
- λμ μ΄λ¦μ λ°°μ΄μμ νλ μ© κ°μ Έμ€κ³ μΊμ λ°°μ΄μ ν¬ν¨λμ΄ μλμ§ νμΈνλ€.
- μμΌλ©΄, μκ°+1 νκ³ , ν΄λΉ μΈλ±μ€λ₯Ό pop λ°°μ΄ λμ λ€μ append νλ€. (μ°Έμ‘°μκ° μ λ°μ΄νΈ κ°λ μΌλ‘)
- μμΌλ©΄, μκ°+5 νκ³
1. μΊμ λ°°μ΄μ΄ μΊμ μ¬μ΄μ¦ λ³΄λ€ μμ κ²½μ°, μλ‘μ΄ λμλ₯Ό λ°°μ΄μ κ·Έλ₯ append νλ€.
2. μΊμ λ°°μ΄μ΄ μΊμ μ¬μ΄μ¦ λ³΄λ€ ν° κ²½μ°, 0λ² μΈλ±μ€λ₯Ό popν΄ μμ κ³ , μλ‘μ΄ λμλ₯Ό λ°°μ΄μ append νλ€. - μ΄λ° μμΌλ‘ forλ¬Έμ μ’ λ£νλ©΄ λμ μκ°μ 리ν΄νλ€.
μμ€μ½λ)
* 1μ°¨)
def firstCache(cacheSize, cities):
if cacheSize == 0 :
return len(cities) * 5
cache_list = []
time = 0
for city in cities:
city = city.lower()
if city in cache_list:
time += 1
cache_list.append(cache_list.pop(cache_list.index(city)))
else :
time += 5
if len(cache_list) < cacheSize :
cache_list.append(city)
else :
cache_list.pop(0)
cache_list.append(city)
return time
리뷰)
CS μ§μκΉμ§ νμνλ λ¬Έμ ννν
λλΆμ μ§μ νλ λ μΆκ° νλ€.
LRU λ°©μμ 곡λΆνκ³ μ€μ€λ‘ μμλ₯Ό νλ² λ§λ€μ΄λ³΄λ λ‘μ§ μ§λ 건 μ¬μλ€.
'Coding Test > Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| μμ΄ (0) | 2023.03.18 |
|---|---|
| Programmers] λ©λ¦¬ λ°κΈ° (0) | 2023.03.18 |
| Programmers] κ΄νΈ νμ νκΈ° (0) | 2023.03.14 |
| Programmers] μ΅μκ° λ§λ€κΈ° (0) | 2023.03.13 |
| Programmers] Nκ°μ μ΅μ곡배μ (0) | 2023.03.07 |
