코딩테스트

[프로그래머스][KAKAO_BLIND][2018] 캐시

pythaac 2021. 9. 1. 07:07
프로그래머스 코딩테스트 고득점 Kit의 문제입니다.

https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

문제

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

 

내가 작성한 코드

from collections import deque

def get_time(cache, cacheSize, city):
    # no cache
    if cacheSize == 0:
        return 5
    
    # cache miss
    if city not in cache:
        if len(cache) == cacheSize:
            cache.popleft()
        cache.append(city)
        return 5

    # cache hit
    else:
        del cache[cache.index(city)]
        cache.append(city)
        return 1

def solution(cacheSize, cities):
    answer = 0
    cache = deque()

    for city in cities:
        answer += get_time(cache, cacheSize, city.lower())

    return answer
  • 3가지 케이스로 나눔
    • 캐시가 없을 때
    • 캐시 미스
    • 캐시 히트
  • 캐시 미스와 캐시 없는 케이스는 합칠 수 있음

 

다른 사람이 작성한 코드

def solution(cacheSize, cities):
    import collections
    cache = collections.deque(maxlen=cacheSize)
    time = 0
    for i in cities:
        s = i.lower()
        if s in cache:
            cache.remove(s)
            cache.append(s)
            time += 1
        else:
            cache.append(s)
            time += 5
    return time
  • 깔끔하다
    • 내가 코드 짤 때 함수로 작성할 생각을 왜 했는지 모르겠다

 

기억해야할 것

  • deque(maxlen=cacheSize)
    • size가 넘치면 밀어내서 버리는 듯
    • deque니까 양쪽으로 버릴듯?