티스토리 뷰

문제주소

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, Rome, Paris, Jeju, NewYork, Rome] 60 5 [Jeju, Pangyo, S

programmers.co.kr

내 풀이

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

처음에 deque로만 사용해서 쓰니까 LRU 알고리즘을 쓴다고 문제에 나왔는데 가장 최근의 값이 맨 오른쪽으로 오지 않아서 내부 테스트 케이스 통과가 안 되었다. 삭제하고 다시 넣어주는 방식으로 진행했다.

문제에서 주어진 테스트 케이스에서 cacheSize 가 0 인 경우 예외처리를 해주어야 했다.

문제에서 요구하는 대로 예외없이 진행되게 하는데 집중해야 겠다. 이 문제는 바로 전에 푼 튜플 문제보다 좀 더 편하게 풀었다.

다른사람 풀이 참고

deque에 maxlen 의 옵션을 줄 수 있다. 캐시 사이즈를 체크하고 앞 부터 제거하는 것 없이 append로만 간략하게 정리할 수 있다. cacheSize가 0 인 경우의 예외처리도 안 해도 된다.
deque maxlen 옵션 참고자료

from collections import deque 
def solution(cacheSize, cities):
    answer = 0
    cache = deque(maxlen=cacheSize)
    for city in cities :
        city = city.lower()
        if city in cache :
            cache.remove(city)
            cache.append(city)
            answer += 1
        else: 
            cache.append(city)
            answer += 5 
    return answer

정리

문제에 조건에 따라 예외없이 그대로 작성하는 연습을 더 해야겠다. 아직도 문제 테스트 케이스 통과 후에 내부 테스트케이스에서 진행되지 않는 경우가 너무 많다ㅠㅠㅠ

deque에 maxlen 옵션을 줄 수 있는지 처음 알았다. 유용하게 사용 가능할 듯 하다.

cache hit, cache miss 의 개념도 몰라서 찾아보고 진행했다. cache hit이란 캐시에 존재하는 데이터를 읽어올 때, cache miss란 캐시에 존재하지 않는 데이터를 읽어들이는 경우다. 운영체제와 CS의 공부의 필요성을 다시 느끼는 문제였다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함