티스토리 뷰
문제
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(Least Recently Used)란, 최근에 사용한 것을 최상위 순위에 오래전에 사용한 것을 최하위 순위에 두고, 데이터가 하나 들어온다면 가장 오랫동안 사용하지 않은 것을 빼고 새로운 데이터를 넣는 방법이다.
먼저 cacheSize가 0일 때, 저장할 공간이 없으므로 len(cities)*5 를 return 해줘야 한다.
만약, city가 cache 안에 있다면 answer += 1 한 후에 city 를 cache의 오른쪽 끝에 오게끔 함으로써 우선순위를 높여준다.
cache는 아래와 같이 구성된다.
cache = [가장 먼저 나갈 것, *** , 가장 나중에 나갈 것(즉, 최근에 사용한 것)]
city가 cache 안에 없다면 cache의 얼마나 차있는지 확인해봐야 한다.
cache안에 있는 데이터의 양과 cacheSize가 같다면 가장 오래전에 사용한 데이터를 빼고 넣어줘야 한다.
def solution(cacheSize, cities):
answer = 0
cache = []
if cacheSize == 0:
return len(cities)*5
for city in cities:
city = city.upper()
if city in cache: #city가 캐시안에 있다면
answer += 1
idx = cache.index(city)
if idx != len(cache)-1: #가장 최근에 사용하지 않았다면 중간에 있을테니 맨 끝으로 보내줘야 한다.
cache = cache[:idx]+cache[idx+1:]
cache.append(city)
else:
answer += 5
if len(cache) == cacheSize:
cache = cache[1:]
cache.append(city)
else:
cache.append(city)
return answer
'Coding - Algo > python' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 (python 파이썬) (0) | 2021.06.23 |
---|---|
[프로그래머스] 핸드폰 번호 가리기 (python 파이썬) (0) | 2021.06.22 |
[프로그래머스] 가장 큰 수 (python 파이썬) (0) | 2021.06.22 |
[프로그래머스] 이중우선순위 큐 (python 파이썬) (0) | 2021.06.20 |
[프로그래머스] 디스크 컨트롤러 (python 파이썬) (2) | 2021.06.17 |
- Total
- Today
- Yesterday
- union-find
- SSAFY
- 1699 자바
- 백준 풀이
- 백준
- 파이썬 풀이
- 타일링 자바
- 백준 17144
- poker swea
- 백준파이썬
- 백준 dp 문제
- 3996 자바
- 삼성청년SW아카데미
- swea 타일링 자바
- 프로그래머스 자바
- 1240 자바
- 프로그래머스 더 맵게
- SWEA
- 우분투
- 메뉴리뉴얼 풀이
- swea 4070 타일링
- 파이썬
- 프로그래머스
- swea 1240
- swea 타일링
- swea 1240 자바
- ubuntu
- 더 맵게
- 프로그래머스 파이썬
- yoloV3
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |