본문 바로가기
코딩테스트/Python

[프로그래머스][파이썬] 캐시

by 포뇨j 2023. 12. 8.

 

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

 

프로그래머스

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

programmers.co.kr

 

def solution(cacheSize, cities):
    answer = 0
    lower_cities = []
    arr = []
    
    #도시명을 소문자로 변환
    for city in cities:
        lower_cities.append(city.lower())
    
    #캐시 교체 알고리즘
    for city in lower_cities:
    	#cache hit
        if city in arr:
            arr.remove(city)
            answer += 1
        #cache miss
        else:
            answer += 5
        arr.append(city)
        if len(arr) > cacheSize:
            arr.remove(arr[0])

    return answer

 

두 개의 리스트를 사용해서 풀었다.

하나는 도시명을 일괄적으로 소문자로 변환 후 저장한 리스트, 하나는 캐시 리스트이다.

LRU(Least Recently Used) 알고리즘을 사용하기 때문에,

cacheSize를 초과하는 경우와 이미 존재하는 데이터가 입력되는 경우에는 첫번째 데이터를 삭제하도록 했다.

 

다른 사람의 풀이를 보면 소문자 일괄 변환한 리스트를 생성하기 보다는

하나의 for문 내에서 소문자 변환과 캐시 교체 모두 하는 방식으로 구현하는 경우가 많은 것 같다.