본문 바로가기

PS/프로그래머스

[프로그래머스 LV 2] 캐시 (파이썬/python)

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