Algorithm/1일 1코테
[프로그래머스 Python] 캐시 (from kakao)
대인보우
2020. 10. 16. 16:12
반응형
문제
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
내 답
1차 시도
# 정확도 80점으로 통과 X
def solution(cacheSize, cities):
cache = [] # 캐시 생성
time = 0
if 0 < cacheSize: # 만약 캐시 사이즈가 0보다 크면
for i, c in enumerate(cities):
c = c.lower() # 모두 소문자로 통일
if cacheSize-1 < i : # 인덱스가 cache size보다 크고 (더이상 그냥 append X)
if c in cache: # 캐시 안에 이미 c가 있으면
ci = cache.index(c) # 해당 인덱스를 찾아
cache.append(cache.pop(ci)) # 빼고, 다시 append (최신 사용이기 때문에)
time += 1
else: # 해당 index가 없으면
cache.pop(0) # 가장 사용 X인 첫번째 값 빼고 C append
cache.append(c)
time += 5
else: # 인덱스가 cache size보다 작으면 그냥 append
cache.append(c)
time += 5
else: # 캐시 사이즈가 0이면 다른 처리 없이 CITY수 * 5
return len(cities) * 5
return time
2차 시도
# 역시나 정확도 80점으로 통과 X
# 좀 더 가독성 좋게 수정
def solution(cacheSize, cities):
cache = []
time = 0
# 만약 0이면 그냥 return
if cacheSize == 0:
return len(cities) * 5
# 만약 0이 아니라면
else:
for i, c in enumerate(cities):
c = c.lower()
if c in cache:
cache.pop(cache.index(c))
cache.append(c)
time += 1
else:
if i < cacheSize :
cache.append(c)
time += 5
else:
cache.pop(0)
cache.append(c)
time += 5
return time
3차 시도 > 통과
def solution(cacheSize, cities):
cache = []
time = 0
#
if cacheSize == 0:
return len(cities) * 5
else:
for i, c in enumerate(cities):
c = c.lower()
if c in cache:
cache.pop(cache.index(c))
cache.append(c)
time += 1
else:
if len(cache) < cacheSize : #len(cache)로 수정
cache.append(c)
time += 5
else:
cache.pop(0)
cache.append(c)
time += 5
return time
다른사람 풀이
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
데크 사용한 풀이
인덱스 필요없이 해당 값 삭제가 가능하구만~~~~~~!!
반응형