Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- string유형
- 값/참조/주소에 의한 전달
- C언어 스택 연산
- 주기억장치
- getline()함수
- 프로그래머스 푸드 파이트 대회
- 논리 연산
- 유형 변환
- IPv4 주소체계
- c언어 괄호검사
- 프로그래머스 배열만들기4
- 원형 연결 구조 연결된 큐
- 괄호 검사 프로그램
- 입출력 관리자
- 문제해결 단계
- 범위 기반 for문
- l-value참조자
- C언어 덱
- auto 키워드
- const l-value참조자
- C언어 계산기 프로그램
- LAN의 분류
- const화
- 회전 및 자리 이동 연산
- r-value참조자
- 문자형 배열
- 알고리즘 조건
- 운영체제 기능
- 백준 파이썬
- 네트워크 결합
Archives
- Today
- Total
chyam
[프로그래머스 Lv2,python]- [1차]캐시 본문
https://school.programmers.co.kr/learn/courses/30/lessons/17680
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
def solution(cacheSize, cities):
answer = 0
cache=[]
for a in range(len(cities)): # 대소문자 상관없도록 소문자로 통일해줌
cities[a]=cities[a].lower()
for a in cities:
if a in cache: # 캐시에 존재하면 그 데이터를 지우고 뒤에 추가해준다.
cache.remove(a)
cache.append(a)
answer+=1
else: # 존재하지 않으면
if(len(cache)==cacheSize and cacheSize>0): # 캐시 길이가 최대이거나 사이즈가0보다 크면 맨앞 삭제
cache.pop(0)
if (cacheSize>0): # 그리고 추가하기
cache.append(a)
answer+=5
return answer
LRU 알고리즘을 사용하였다.
> LRU 알고리즘이란?
페이지 교체 알고리즘의 종류로 페이지의 부재가 발생했을 때, 가장 오랫동안 사용되지 않은 페이지를 제거한다. 만약 같은 데이터가 있다면 원래 있는 데이터를 삭제하고 뒤에 추가해준다.
Cache hit는 요청된 데이터가 이미 캐시에 존재하는 경우이다.
Cache miss는 요청된 데이터가 캐시에 존재하지 않는 경우이다.
만약 캐시의 크기가 3이고, 데이터가 [1,3,4,3,5,1]이라면?
캐시에는 [1,3,4]가 저장되고 난뒤 다음 데이터가 3인데 이미 캐시에 존재하므로 원래 있는 3을 삭제하고 4를 앞으로 보낸뒤 맨 뒤에 3을 추가하여 [1,4,3]이 된다. 그다음은 5인데 캐시에 존재하지 않으므로 가장 오랫동안 사용되지 않은 데이터인 1을 삭제하고 맨뒤에 추가해주어 [4,3,5]가 된다. 그 다음 1도 존재하지 않으므로 [3,5,1]이 된다.