코딩테스트 연습 - [1차] 캐시 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - [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
REVIEW
- DB 캐시에 대한 배경지식이 있어야 문제 풀기가 수월하다.
- DB 캐시는 트래픽으로 인한 서버 다운, 웹 또는 어플리케이션 서비스 이용 속도를 개선하기 위하여 임시 데이터를 캐시에 저장하여 정보가 필요할 경우 캐시에 access하는 방식이다.
- 필요 정보가 캐시에 있을 경우를 cache hit이라고 하며, 그 반대의 경우를 cache miss라고 한다.
- 이러한 작동방식을 그대로 코드로 구현하였다.
- 새로운 정보가 들어올 때는 cache의 가장 오른쪽에, 기존 정보가 cache에서 탈락할 때는 가장 왼쪽 것부터 탈락하게 만들어 LRU를 구현하였다. 왼쪽에서 pop을 효율적으로 수행하기 위해 deque를 사용하였다.
- cache hit일 경우 answer에 1을 더하였다. 그리고 cache 안에 있던 해당 city를 삭제하고 새롭게 cache 오른쪽에 삽입하였다. (가장 최근에 사용된 데이터이기 때문)
- cache miss일 경우 항상 answer에 5을 더하였다. cache가 비어있을 수도 있기 때문에 에러를 방지하고자 우선 city를 추가한 후, cachesize 초과 여부에 따라 popleft( )를 수행하였다.
from collections import deque
def solution(cacheSize, cities):
answer = 0
cache = deque()
for city in cities:
city = city.upper()
if city in cache:
cache.remove(city)
cache.append(city)
answer += 1
else:
cache.append(city)
if len(cache) > cacheSize:
cache.popleft()
answer += 5
return answer
다른 사람들의 코드를 보니 굳이 cache 길이를 재며 popleft( ) 여부를 결정하는 것 대신, 이렇게 deque(maxlen=cacheSize) cache 자체에 최대 길이를 설정하여 자동적으로 cache 길이 관리하는 것이 더 나아보인다.
'Coding Test' 카테고리의 다른 글
[프로그래머스] 달리기 경주 in Python (0) | 2023.06.28 |
---|---|
[프로그래머스] 빛의 경로 사이클 문제풀이 in Python (0) | 2021.10.11 |
[백준] 10845번: 파도반 수열 문제풀이 in Python (0) | 2021.08.31 |
[프로그래머스] 스킬트리 문제풀이 in Python (0) | 2021.08.13 |
[백준] 10845번: 큐 문제풀이 in Python (0) | 2021.08.12 |