티스토리 뷰
문제
https://school.programmers.co.kr/learn/courses/30/lessons/17680
풀이
- 조건
- cacheSize는 0이상 30이하
- cities는 1이상(문제가 돌아갈려면 1개이상은 들어올것이다) 100000이하
- cities의 값은 최대 20자, 영문자로 구분, 대/소 구분을 하지않음
- 예제
캐시크기(cacheSize) 도시이름(cities) 실행시간 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", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"] 52 2 ["Jeju", "Pangyo", "NewYork", "newyork"] 16 0 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA"] 25 - 예제 해석
- 1,2번 예제 - 캐시는 같고 도시 수에 따른 처리
- 3,4번 예제 - 도시 수는 같고 캐시 크기에 따른 처리
- 5번 예제 - 대/소문자가 다르지만 같은 도시가 들어올 수 있음 ( 대/소 문자를 구별하지 않는 방법 처리 )
- 6번 예제 - 캐시의 크기가 0일 수 있음 ( 캐시크기가 0일때 처리 )
- 소스 작성
- 캐시를 배열로 구성하고 해당 배열은 큐로 활용한다. 예제 해석에 따른 케이스를 분류하고 반복문과 조건문을 배치 하면 쉽게 풀리는 방식
- LRU(Least Recently Used) : 가장 오래 참조하지 않은 내용을 삭제하고 최근에 참조한 내용을 저장하는 방식
- cache hit : 캐시에 참조할 내용이 들어있는 경우, 시간만 더 하고 넘어가면 됨
- cache miss : 캐시에 참조할 내용이 들어있지 않는 경우, 시간을 더하고 캐시를 정리해야함
전체코드
import Foundation
func solution(_ cacheSize:Int, _ cities:[String]) -> Int {
let cities = cities.map { $0.uppercased() }
var cacheCities: [String] = [String](repeating: "", count: 0)
var totalTime: Int = 0
if cacheSize == 0 { // 1. 캐시 사이즈가 0이면 도시수 * 5
totalTime = cities.count * 5
}else {
for city in cities {
// 2. city가 캐시에 들어있는지 확인
var check: Bool = false //캐시에 들어있으면 true, 없으면 false
for cacheCity in cacheCities.enumerated() {
if city == cacheCity.element { // 3. city가 캐시에 들어있음
totalTime += 1
cacheCities.remove(at: cacheCity.offset) // 기존의 내용을 삭제
cacheCities.append(cacheCity.element) // 캐시를 새롭게 정리
check = true
break
}
}
if !check { //캐시에 들어있지않으면
totalTime += 5
if cacheCities.count == cacheSize { // 캐시가 가득찾으면 가장 처음에 넣은 캐시 값 삭제
cacheCities.removeFirst()
}
cacheCities.append(city) // 캐시에 저장
}
}
}
return totalTime
}'PS > 문제 풀이' 카테고리의 다른 글
| [프로그래머스/Swift] 64065번 - 튜플 (0) | 2025.02.01 |
|---|---|
| [프로그래머스/Swift] 87946번 - 피로도 (1) | 2025.01.30 |
| [프로그래머스/Swift] 42586번 - 기능개발 (0) | 2025.01.30 |
| [프로그래머스/Swift] 42747번 - H-Index (0) | 2025.01.28 |
| [프로그래머스/Swift] 42578번 - 의상 (0) | 2025.01.26 |
