문제
처음 작성한 코드
def solution(cacheSize, cities):
from collections import deque
answer = 0
used = deque([])
if cacheSize==0:
return len(cities)*5
cities = [value.lower() for _,value in enumerate(cities)]
for i in cities:
if i not in used:
if len(used) < cacheSize:
used.append(i)
else:
used.popleft()
used.append(i)
answer+=5
else:
used.remove(i)
used.append(i)
answer+=1
return answer
- cacheSize 0이면 계속 cache miss니까 예외처리 하고 시작했다.
- 대소문자 구별하지 않으니까 다 소문자로 바꿨다.
- i가 cache에 있으면 cache에 계속 존재하지만 가장 최근에 접근되었기 때문에 remove 후 append를 하여 최근 접근된 것을 표현했다.
- i가 cache에 없으면 제일 오래된 [0]번째에 있는 원소를 빼고 제일 마지막에 append로 현재 i를 저장한다.
깨달은 점
- 잠시 잊었던 LRU 알고리즘을 다시 생각해냈다. LRU: 제일 안쓰이는 거 교체 -> 큐 사용(FIFO)
- 2단계지만 어렵지않았다. 파이썬이랑 친해지고 있는 것 같다.
'Programmers' 카테고리의 다른 글
[프로그래머스] 문자열 압축 (0) | 2021.01.18 |
---|---|
[프로그래머스] 프렌즈4블록 (0) | 2021.01.17 |
[프로그래머스] 키패드 누르기 (0) | 2021.01.14 |
[프로그래머스] 다트 게임 (0) | 2021.01.14 |
[프로그래머스] 비밀지도 (0) | 2021.01.13 |