반응형
    
    
    
  캐시 - 2018 카카오 1차 / Level 2
문제 풀이:
- 캐시 교체 알고리즘인 LRU(Least Recently Used)를 사용한다.
 - 대소문자를 구분하지 않는다.
 - hit일 경우 실행시간은 1로 계산하며, miss일 경우 5로 계산한다.
 - 큐를 이용한다.
 
1. 대소문자를 구분하지 않기 때문에 도시들을 소문자로 바꿔준다.
2. 캐시의 사이즈가 0일 경우 도시의 수만큼 5를 곱해서 리턴한다.
3. 해당 순서의 도시가 캐시에 없을 경우 (miss)
3-1. 도시를 캐시에 넣어준다.
3-2. 캐시가 가득 찼다면 가장 오래된 데이터를 제거해주고 넣어준다.
3-3. 실행시간을 5만큼 더해준다.
4. 해당 순서의 도시가 캐시에 있을 경우 (hit)
4-1. 캐시에서 해당 도시의 데이터를 꺼내고 제일 앞으로 옮겨준다.
4-2. 실행시간을 1만큼 더해준다.
코드:
import Foundation
func solution(_ cacheSize:Int, _ cities:[String]) -> Int {
    
    let cities = cities.map { $0.lowercased() }
    var cache = [String]()
    var cnt = 0
    
    if cacheSize == 0 {
        return cities.count * 5
    }
    
    for i in 0..<cities.count {
        if !cache.contains(cities[i]) {
            if  cache.count < cacheSize {
                cache.append(cities[i])
            } else {
                cache.removeFirst()
                cache.append(cities[i])
            }
            cnt += 5
        } else {
            let cacheIndex = cache.firstIndex(of: cities[i])!
            let temp = cache.remove(at: cacheIndex)
            cache.append(temp)
            cnt += 1
        }
    }
    
    return cnt
}
print(solution(3, ["Jeju","Pangyo","Seoul","NewYork","LA","Jeju","Pangyo","Seoul","NewYork","LA"])) // 50
print(solution(2, ["Jeju", "Pangyo", "NewYork", "newyork"])) // 16
문제:
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, Rome, Paris, Jeju, NewYork, Rome] 60 5 [Jeju, Pangyo, S
programmers.co.kr
반응형
    
    
    
  'Algorithm > Programmers' 카테고리의 다른 글
| [Algorithm/Programmers] 섬 연결하기 Swift (0) | 2021.02.02 | 
|---|---|
| [Algorithm/Programmers] 베스트앨범 Swift (0) | 2021.01.29 | 
| [Algorithm/Programmers] 올바른 괄호 Swift (0) | 2021.01.15 | 
| [Algorithm/Programmers] 다음 큰 숫자 Swift (0) | 2021.01.15 | 
| [Algorithm/Programmers] 가장 큰 정사각형 찾기 Swift (0) | 2021.01.14 | 
댓글