[프로그래머스 LV2] 캐시

Junyoung Park·2022년 8월 7일
0

코딩테스트

목록 보기
533/631
post-thumbnail

1. 문제 설명

캐시

2. 문제 분석

집합을 통해 캐시를, LRU로 캐시 미스 경우 삭제할 캐시를 리스트 형식의 큐로 관리했다. 힙, 큐 등 일반 리스트가 아닌 자료구조를 사용할 때 LRU로 "가장 최신" 사용한 원소를 맨 뒤로, "삭제할 수 있는" 원소를 맨 앞으로 자동으로 오게 할 수 있을 것 같다.

3. 나의 풀이

func solution(_ cacheSize:Int, _ cities:[String]) -> Int {
    var total = 0
    var cache = Set<String>()
    var cacheArray = [String]()
    
    for city in cities {
        let city = city.lowercased()
        if cache.contains(city) {
            total += 1
            guard let idx = cacheArray.firstIndex(of: city) else { continue }
            cacheArray.remove(at: idx)
            cacheArray.append(city)
        } else {
            total += 5
            if cache.count < cacheSize {
                cache.insert(city)
                cacheArray.append(city)
            } else if !cache.isEmpty {
                let removedItem = cacheArray.removeFirst()
                cache.remove(removedItem)
                cache.insert(city)
                cacheArray.append(city)
            }
        }
    }
    return total
}
profile
JUST DO IT

0개의 댓글