본문 바로가기

나 취준생/파이썬

LRU 알고리즘 + 카카오 문제

320x100

LRU 알고리즘이란 Oracle DATABASE의 메모리 관리를

효율적으로 하기 위해 고안된 대표적인 알고리즘으로

최신 데이터를 메모리에 유지시키고

오래된 데이터는 메모리에서 내보내게 하는 알고리즘


예를 들어,


SQL > select sal from emp where ename='scott';


위 SQL 문장은 메모리에 정보가 올라와있다면 1초,             -> cashe hit

메모리에 정보가 없어 디스크에서 조회하면 5초가 걸린다.    -> cashe miss


(걸리는 시간은 예시일 뿐)


하지만 메모리 공간이 한정되어 있어, 무한히 데이터를 올릴 수 없다.

따라서 오래된 데이터는 버리고 최신 데이터로 올린다.


'최근에 내가 검색한 데이터는 다시 검색할 확률이 높을거야' 라고 가정한다.




예제 : 2017 카카오 블라인드 1차 캐시




이게 무슨 말인가 했더니, 그냥 리스트에 넣고, 입력한 캐시 크기만큼의 길이의 리스트를 따로 만들어서

리스트의 요소를 하나씩 넣고 요소가 겹치면 +1, 안 겹치면 +5 하면서 그 리스트의 길이는 유지시키는 거뿐이었다.


말을 왜.. 이해를 못하겠냐 ㅠㅠ


이해하고 나면 할만했는데 이해하기 전까진 도대체 무슨 문제인가 했다.

갈 길이 멀구나..




내 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def kakao(cities,cacheSize):
    t=0
    for i in range(len(cities)):
        cities[i]=(cities[i].lower())
    list=[]
    for i in range(len(cities)):
        if cities[i] in list:
            t+=1
        else:
            t+=5
            list.append(cities[i])
            if len(list)>cacheSize:
                list=list[1:]
    print(t)
    return
kakao(["Jeju""Pangyo""Seoul""NewYork""LA""Jeju""Pangyo""Seoul""NewYork""LA"],3)
kakao(["Jeju""Pangyo""Seoul""Jeju""Pangyo""Seoul""Jeju""Pangyo""Seoul"],3)
kakao(["Jeju","Pangyo","Seoul","NewYork","LA","SanFrancisco","Seoul","Rome","Paris","Jeju","NewYork","Rome"],2)
kakao(["Jeju","Pangyo","Seoul","NewYork","LA","SanFrancisco","Seoul","Rome","Paris","Jeju","NewYork","Rome"],5)
kakao(["Jeju","Pangyo",'NewYork','newyork'],2)
kakao(["Jeju","Pangyo","Seoul","NewYork","LA"],0)
kakao(['Jeju''Jeju','Jeju'],3)





반응형

'나 취준생 > 파이썬' 카테고리의 다른 글

카카오 비밀지도  (0) 2020.12.28
자카드 유사도 + 카카오 문제  (0) 2020.12.24
재귀함수  (0) 2020.12.23
탐욕 알고리즘  (0) 2020.12.23
버블 정렬  (0) 2020.12.23