STUDY/Algorithm

[프로그래머스] 캐시, 2018 KAKAO BLIND RECRUITMENT[1차], python

sinawi95 2021. 7. 19. 22:59
728x90

https://programmers.co.kr/learn/courses/30/lessons/17680?language=python3# 

 

코딩테스트 연습 - [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

from collections import deque
def solution(cacheSize, cities):
    answer = 0
    cache_set = set()
    cache = deque()
    for i in range(len(cities)):
        city = cities[i].lower()
        if city in cache_set:
            cache.remove(city)
            cache.append(city)
            answer += 1
        else:
            if cacheSize and len(cache_set) >= cacheSize:
                cache_set.remove(cache.popleft())
            if cacheSize:
                cache_set.add(city)
                cache.append(city)
            answer += 5
        
    return answer

set 을 사용해서 중복이 있는지 확인했다.

그리고 deque를 사용하여 사용된 값은 맨뒤로 보내는 작업을 했다.

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

set을 사용하지 않아도 된다.


deque에 maxlen 이라는 인자를 사용하면 조금더 쉽게 구현할수 있다.