๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Developer/๐ŸŸ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/python] [1์ฐจ]์บ์‹œ

์บ์‹œ

์–ดํ”ผ์น˜์—๊ฒŒ ์‹œ๋‹ฌ๋ฆฌ๋Š” ์ œ์ด์ง€๋ฅผ ๋„์™€, DB ์บ์‹œ๋ฅผ ์ ์šฉํ•  ๋•Œ ์บ์‹œ ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ์‹คํ–‰์‹œ๊ฐ„ ์ธก์ • ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ ํ˜•์‹

  • ์บ์‹œ ํฌ๊ธฐ(cacheSize)์™€ ๋„์‹œ์ด๋ฆ„ ๋ฐฐ์—ด(cities)์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.
  • cacheSize๋Š” ์ •์ˆ˜์ด๋ฉฐ, ๋ฒ”์œ„๋Š” 0 โ‰ฆ cacheSize โ‰ฆ 30 ์ด๋‹ค.
  • cities๋Š” ๋„์‹œ ์ด๋ฆ„์œผ๋กœ ์ด๋ค„์ง„ ๋ฌธ์ž์—ด ๋ฐฐ์—ด๋กœ, ์ตœ๋Œ€ ๋„์‹œ ์ˆ˜๋Š” 100,000๊ฐœ์ด๋‹ค.
  • ๊ฐ ๋„์‹œ ์ด๋ฆ„์€ ๊ณต๋ฐฑ, ์ˆซ์ž, ํŠน์ˆ˜๋ฌธ์ž ๋“ฑ์ด ์—†๋Š” ์˜๋ฌธ์ž๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋„์‹œ ์ด๋ฆ„์€ ์ตœ๋Œ€ 20์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

์ถœ๋ ฅ ํ˜•์‹

  • ์ž…๋ ฅ๋œ ๋„์‹œ์ด๋ฆ„ ๋ฐฐ์—ด์„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์ด ์‹คํ–‰์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

์กฐ๊ฑด

  • ์บ์‹œ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ LRU(Least Recently Used)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • cache hit์ผ ๊ฒฝ์šฐ ์‹คํ–‰์‹œ๊ฐ„์€ 1์ด๋‹ค.
  • cache miss์ผ ๊ฒฝ์šฐ ์‹คํ–‰์‹œ๊ฐ„์€ 5์ด๋‹ค.

 


ํ’€์ด

 

def solution(cacheSize, cities):
    cache = []
    answer = 0
    if cacheSize == 0 : return len(cities) * 5
    
    for r in cities :
        x = r.lower()
        
        if not x in cache:
            if len(cache) < cacheSize:
                cache.append(x)

            else :
                cache.pop(0)
                cache.append(x)
            answer += 5


        else :
            cache.pop(cache.index(x))
            cache.append(x)
            answer += 1
    
    return answer

 

 


ํ’€์ด ๊ณผ์ •

 

์บ์‹œ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ LRU(Least Recently Used)

 

 

cache hit  : ์ƒˆ๋กœ์šด ์ฐธ์กฐ๊ฐ’์ด ์บ์‹œ์•ˆ์— ์žˆ๋‹ค๋ฉด ๊ทธ ์ฐธ์กฐ๊ฐ’์„ ๊ฐ€์žฅ ์ตœ๊ทผ์œผ๋กœ ์˜ฎ๊ธด๋‹ค.

 

cache miss : ์ƒˆ๋กœ์šด ์ฐธ์กฐ๊ฐ’์ด ์บ์‹œ์•ˆ์— ์—†๋‹ค๋ฉด ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ฐธ์กฐ๊ฐ’์„ ์—†์• ๊ณ  ์ƒˆ๋กœ์šด ์ฐธ์กฐ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

    ์ฐธ์กฐ๊ฐ’               7                 3

 

์ดˆ๊ธฐ๊ฐ’ cache miss cache 
hit
3 7 3
2 3 7
4 2 2