[Python] 프로그래머스 lv2 - [1차] 캐시
2022. 12. 23. 11:09ㆍ알고리즘/문제풀이
[Python] 프로그래머스 lv2 - [1차] 캐시
코딩테스트 연습 - [1차] 캐시 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
문제에서 주어진 것
- cacheSize : 도시이름을 저장할 수 있는 공간의 용량
- cities : 도시의 이름이 담긴 배열, 대소문자 구분 x
- 시간 : cache에 해당 도시가 있을 경우 +1 / 존재하지 않을 경우 +5
- LRU : Least Recently Used - 캐시 알고리즘
- 캐시에 공간이 부족할 때 가장 오랫동안 사용하지않은 항목을 제거하고 새로운 항목을 넣어줌
풀이 방법
- cachesize 확인
- 만약 size가 0이라면 저장이 되는 캐시가 없으므로 return len(cities)*5
- size 확인 후 0 이상이면, cache가 들어갈 리스트 생성
- cities for 반복문으로 각 도시 체크
- 이때 문제에서 도시의 대소문자 구분을 하지않는다고 함
- 도시의 이름을 전부다 소문자로 변경해주면서 진행
- 만약 도시의 이름이 캐시리스트에 존재
- 시간(answer) +=1
- 해당 캐시 내부에서 재사용 되었으므로 기존의 리스트에서 pop(), append()를 통해 리스트를 최신화
- 오래된 도시의 이름을 제거하기 위해 사용
- 만약 도시의 이름이 캐시리스트에 존재X
- 시간 += 5
- 만약 캐시 리스트의 크기가 cache의 사이즈와 동일한 경우
- pop(0)를 통해 가장 오래된 캐시 제거
- 캐시에 새로 등장한 도시를 append()
- 이때 문제에서 도시의 대소문자 구분을 하지않는다고 함
코드
def solution(ca, ci):
answer = 0
if ca == 0 : # 1
return len(ci)*5 #1-1
else :
cache = [] # 2
for i in range(len(ci)): # 3
ci[i] = ci[i].lower() # 3-1
if ci[i] in cache: # 3-2
answer +=1 # 3-2-1
a = cache[cache.index(ci[i])]
cache.pop(cache.index(a)) #3-2-2-2
cache.append(a)
else : #3-3
answer += 5 #3-3-1
if len(cache) == ca: #3-3-2
cache.pop(0)
cache.append(ci[i]) #3-3-3
return answer
'알고리즘 > 문제풀이' 카테고리의 다른 글
[Python] 프로그래머스 lv2 - 게임 맵 최단거리 (0) | 2022.12.27 |
---|---|
[Python] 프로그래머스 lv2 - 멀리 뛰기 (0) | 2022.12.26 |
[Python] 프로그래머스 lv2 - n개의 최소공배수 (0) | 2022.12.12 |
[Python] 백준 알고리즘 18405 - 경쟁적 전염 (0) | 2022.11.09 |
[Python] 백준 알고리즘 15650번 - N과 M(2) (1) | 2022.10.06 |