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
✅ Solution
- cache 딕셔너리를 만들어두고 city 가 cache.keys()에 있는지 확인한다.
- 있으면 answer에 1을 더해주고 해당 값을 city의 인덱스로 바꿔준다.
- 없으면 answer에 5를 더해주고
- cache의 길이가 cacheSize 보다 작을 땐 바로 딕셔너리에 새 값으로 추가해준다.
- cache의 길이가 cacheSize 보다 클 땐 가장 작은 값을 가지는 key 값을 찾아서 삭제 후, 값을 추가해준다.
✅ Code
def solution(cacheSize, cities):
cache = {}
cities = [x.lower() for x in cities]
answer = 0
if cacheSize == 0:
return len(cities) * 5
for idx, city in enumerate(cities):
if city in cache.keys():
cache[city] = idx
answer += 1
else:
if len(cache) < cacheSize:
cache[city] = idx
answer += 5
else:
minKey = min(cache.keys(), key=lambda x: cache[x])
cache.pop(minKey)
cache[city] = idx
answer += 5
return answer
#################################################################################
✅ Solution
- cache: deque의 maxlen을 이용해서 cacheSize로 최대 길이를 고정시킨다.
- 만약 city가 cache에 있으면 해당 값을 제거 후, 다시 넣어준다. answer += 1
- deque(maxlen=k)로 초기화해두고 난 뒤, 만약 k 이상이 되도록 원소를 추가(append)하면 제일 왼쪽에 있는 원소가 삭제된다
- 만약 city가 cache에 없으면 cache에 값 넣어준다.
✅ Code
from collections import deque
def solution(cacheSize, cities):
answer = 0
cities = [x.lower() for x in cities]
cache = deque(maxlen=cacheSize)
for city in cities:
if city in cache:
cache.remove(city)
cache.append(city)
answer += 1
else:
cache.append(city)
answer += 5
return answer
📝 Today I Learned
deque
- maxlen -> deque의 최대 길이를 설정한다.
- 만약 maxlen 이상의 값을 추가하면
- append() : 맨 왼쪽 원소가 삭제된 후, 맨 오른쪽에 원소가 추가된다.
- appendleft(): 맨 오른쪽 원소가 삭제된 후, 맨 왼쪽에 원소가 추가된다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Level 2 - [3차] 압축 (Python) (0) | 2022.05.20 |
---|---|
[프로그래머스] Level 2 - [3차] 방금그곡 (Python) (0) | 2022.05.18 |
[프로그래머스] Level 2 - [1차] 프렌즈4블록 (Python) (0) | 2022.05.17 |
[프로그래머스] Level 2 - 튜플 (Python) (0) | 2022.05.13 |
[프로그래머스] Level 2 - 후보키 (Python) (0) | 2022.05.13 |