여름의 서재

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT_캐시 (Python) 본문

알고리즘/프로그래머스

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT_캐시 (Python)

엉아_ 2022. 3. 5. 02:25
728x90

📕 문제

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

 

코딩테스트 연습 - [1차] 캐시

3 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] 50 3 ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] 21 2 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Ro

programmers.co.kr

 

💡 풀이법

1. 캐시를 총 길이가 cachesize인 deque으로 만든다.

2. 만약 캐시가 0이라면 무조건 모든 도시가 캐시 미스이므로 cities의 길이 X 5 를 리턴한다.

2. cities 리스트를 돌면서 city를 모두 소문자로 바꾼후 만약 시티가 캐시 안에 들어있지 않다면 캐시에 가장 들어온지 오래된 city 를 popleft를 해서 빼내고 캐시미스이므로 시간에 5를 더한후 city를 캐시에 넣는다.

3. 만약 캐시 안에 city가 있다면 그 city를 맨 뒤로 당겨야하므로 기존에 있던 city는 remove로 없애주고 다시 city에 담는다. 시간은 1을 더해준다.

 

from collections import deque
def solution(cacheSize, cities):
    if cacheSize == 0:
        return len(cities)*5
    
    answer = 0
    cache = deque([0] * cacheSize)
    for city in cities:
        city = city.lower()
        if city not in cache:
            cache.popleft()
            answer += 5
        else:
            cache.remove(city)
            answer += 1
        cache.append(city)
    return answer
Comments