Notice
Recent Posts
Recent Comments
Link
250x250
반응형
DecordRay
[프로그래머스] Level2 : [1차] 캐시[Python] 본문
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
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level2 : 괄호 회전하기[Python] (0) | 2023.01.09 |
---|---|
[프로그래머스] Level2 : 행렬의 곱셈[Python] (0) | 2023.01.06 |
[프로그래머스] Level2 : H-Index[Python] (0) | 2023.01.05 |
[프로그래머스] Level2 : 멀리 뛰기[Python] (0) | 2023.01.05 |
[프로그래머스] Level2 : 예상 대진표[Python] (0) | 2023.01.04 |
Comments