알고리즘/프로그래머스
[프로그래머스] 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