728x90
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
처음 보고 띠용 했다
LRU 알고리즘이 도대체 머임...?
직역하면 가장작(적)은 최근 사용된 >> 최근에 가장 적게사용된 으로 대~~충 이해하고
그거에 맞게 입출력 예시를 보니까 딱 감이왔다
대충 들어갈 수 있는 리스트의 크기가 캐시크기인것이고
도시이름이 순서대로 들어가는데 대소문자 구분 없으니까 .upper( ) 메서드로 전부 대문자로 만들어주고
리스트에 있나 없나 판단하면서 마치 큐 구조처럼 다뤄주면 되는것이다.
만약 리스트 안에 값이 있어서 기존값을 삭제하고 새로운 값을 append( ) 해줘야할때
삭제는 벨류값을 기준으로 삭제해야되기때문에 remove( )를 사용하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
def solution(cacheSize, cities):
answer = 0
# 큐(리스트) 자료구조를 사용해볼게요
cache = []
for c in cities:
if c.upper() not in cache:
answer += 5
# c가 있는 칸을 앞에서 부터 찾아 지우고 모든 인덱스를 한칸씩 앞으로 땡겨줌
if len(cache) == cacheSize and cacheSize != 0:
cache.pop(0)
cache.append(c.upper())
elif len(cache) < cacheSize and cacheSize != 0:
cache.append(c.upper())
# 캐시 안에 존재할경우
elif c.upper() in cache:
answer += 1
cache.remove(c.upper())
cache.append(c.upper())
return answer
|
cs |
728x90
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV 3] 최고의 집합 (파이썬/python) (0) | 2021.06.16 |
---|---|
[프로그래머스 LV 2] [1차] 프렌즈4블록 (파이썬/python) (0) | 2021.06.16 |
[프로그래머스 LV 2] 점프와 순간 이동 (파이썬/python) (0) | 2021.06.12 |
[프로그래머스 LV 2] 이진 변환 반복하기 (파이썬/python) (0) | 2021.06.12 |
[프로그래머스 LV 2] 방금 그 곡 (파이썬/python) (0) | 2021.06.12 |