캐시 ( https://programmers.co.kr/learn/courses/30/lessons/17680 )
처음에는 문제에 대해서 이해하는데에 오랜 시간이 걸렸던 문제입니다. 문제를 이해하고 나니 해결 자체에는 오랜 시간이 걸리지 않았습니다.
#LRU 사용한지 가장 오래된 것을 제거한다.
def solution(cacheSize, cities):
answer = 0;
#캐시크기가 0이 아닐 때
if cacheSize != 0:
cache = []; #캐시를 표현해 줄 배열
#cities의 도시이름들을 모두 소문자로 변경해 줍니다.
for i in range(len(cities)):
cities[i] = cities[i].lower();
#cities를 while을 이용해 탐색합니다.
while cities:
#cities의 이름을 pop(0)을 이용하여 하나씩 꺼내며 판단을 시작합니다.
name = cities.pop(0);
#만약 캐시 안에 이번 도시이름이 존재한다면 해당 도시이름을 가장 최근에 담았다고 변경해 줍니다. (이번 도시 이름을 가장 최근으로 다시 올려줌)
if name in cache:
cache.remove(name);
cache.append(name);
answer += 1; #캐시 히트이므로 1 증가
#도시이름이 캐시 안에 존재하지 않는다면
else:
#캐시크기가 이미 꽉 차있다면 가장 마지막에 사용한 것(index가 0인 것)을 제거하고 캐시에 담아줍니다.
if len(cache) == cacheSize:
cache.pop(0);
cache.append(name);
answer += 5; # 캐시 미스이므로 5 증가
#꽉 차있지 않다면 마지막에 담아주기만 합니다.
else:
cache.append(name);
answer += 5; # 캐시 미스이므로 5 증가
#만약 캐시크기가 0일경우 모두 캐시 미스이므로 전체개수에 5를 곱해서 답을 구해줍니다.
else:
answer = len(cities) * 5;
return answer;
=> 문제 이해가 조금 어려웠을 뿐 풀이가 괜찮았던 문제였습니다.