DecordRay

[프로그래머스] Level2 : [1차] 캐시[Python] 본문

알고리즘/프로그래머스

[프로그래머스] Level2 : [1차] 캐시[Python]

DecordRay 2023. 1. 6. 18:16
728x90
반응형

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17680

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 :

1. cache_arr이라는 캐시 리스트를 만든 후 그 안에 cacheSize만큼 cities[i]를 넣어준 후

cacheSize의 개수 = len(cache_arr)의 개수 일 경우 LRU를 실행하는 알고리즘을 생각하였음.

* Tip - cities[i]가 cache_arr에 있는 경우 기존 cache_arr에 있는 cities[i]를 삭제 후 새로 cache_arr에 cities[i]를 추가(최신화)

 

2. 만약 cacheSize가 0일 경우에는 cache_arr이 필요가없으므로 바로 cities의 개수 * 5를 리턴하도록 함

 

 

코드 :

from collections import deque

def solution(cacheSize, cities):
    answer = 0
    cache_arr = deque()

    if cacheSize == 0:                  # cacheSize가 0일 경우에는 항상 cache miss이므로
        answer = len(cities) * 5
    else:                               # cacheSize가 0이 아닐 경우
        for i in range(len(cities)):        
            if len(cache_arr) < cacheSize: # cache_arr의 크기가 cacheSize보다 작을경우
                if len(cache_arr) != 0 and cities[i].lower() in cache_arr:      # 예를들어 cacheSize가 2이고 현재 cach_arr에 Jeju밖에 안들어가 있을 경우 -> 다음 citie가 Jeju이면 answer += 1을 해줘야하므로
                    answer += 1
                    del cache_arr[cache_arr.index(cities[i].lower())]           # 만약 cache_arr 에 cities[i]가 있다면 기존 cache_arr에 들어있던 cities[i]를 제거 후 새로 cache_arr에 cities[i]를 추가(최신화)
                else:
                    answer += 5
                cache_arr.append(cities[i].lower())
            else:                          # cahce_arr의 크기가 cacheSize일 경우(이미 캐시가 다 찬 상황)
                if cities[i].lower() in cache_arr:
                    answer += 1
                    del cache_arr[cache_arr.index(cities[i].lower())]           # 만약 cache_arr 에 cities[i]가 있다면 기존 cache_arr에 들어있던 cities[i]를 제거 후 새로 cache_arr에 cities[i]를 추가(최신화)
                else:
                    answer += 5
                    cache_arr.popleft()                                         # 만약 cache_arr에 cities[i]가 없다면 cache miss이므로 answer에 5더해준 후 cache_arr에서 가장 오래된 city 제거
                cache_arr.append(cities[i].lower())                             # cache_arr에 새로운 city 추가
                
    return answer
728x90
반응형
Comments