티스토리 뷰
728x90
반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/17680?language=python3
코드
def solution(cacheSize, cities):
answer = 0
stack = []
for i in cities:
if cacheSize == 0:
return 5 * len(cities)
i = i.lower()
if i in stack:
stack.remove(i)
stack.append(i)
answer += 1
else:
answer += 5
stack.append(i)
if len(stack) > cacheSize:
stack.pop(0)
return answer
cacheSize가 주어지고 cache안에 있는 도시이름을 사용할 때는 1이 들고 cache에 없을 경우에는 5에 시간이 든다.
만약 cacheSize가 0일 경우는 무조건 5에 시간이 들기 때문에 5 * len(cities)를 리턴해준다.
대문자 소문자를 구별 안해주므로 모두 같게 소문자로 만들어서 비교한다.
stack에 i가 존재한지 확인 후 존재한다면 stack에 존재하는 i를 제거하고 새로 append를 시켜준다.
stack에 i가 존재하지 않을 경우에는 stack에 append를 시키는데 만약 stack이 꽉찻다면 pop(0)을 해줘 가장 먼저 들어온 값을 빼준다.
왜냐하면 캐시교체 알고리즘은 LRU를 사용하기 때문에 가장 오래된 값을 빼준다.
(LRU는 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법)
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level2, 3차 압축 (Python) (0) | 2021.06.16 |
---|---|
[프로그래머스] Level2, 3차 파일명 정렬 (Python) (0) | 2021.06.16 |
[프로그래머스] Level2, 문자열 압축 (Python) (0) | 2021.06.13 |
[프로그래머스] Level2, 괄호 변환 (Python) (0) | 2021.06.13 |
[프로그래머스] Level2, 구명보트 (Python) (0) | 2021.06.12 |
댓글