https://programmers.co.kr/learn/courses/30/lessons/17680?language=swift
원트에 성공할 줄 알았으나... 실패해서 왜 그런지 봤더니 이미 cache에 있는 경우를 생각하지 못했다.
실제 알고리즘 문제를 풀러 갔으면 fail 했을 문제라는 뜻.
아무튼 해당 예외 케이스만 잘 잡아주면 별 무리 없이 풀 수 있는 문제다.
풀이 로직은 이렇다.
1. 하나씩 돌면서 for city in cities
1-1. cache에서 현재 city가 있는지 확인
1-2. 있으면 + 1, 없으면 + 5
2. cache를 추가.
2-1. cacheSize가 가득 찼다면
2-1-1. cacheSize가 0이면 그냥 지나가기.
2-1-2. caches가 이미 city를 가지고 있는 경우 caches에서 해당 city를 remove하고 맨 뒤에 appen
2-1-3. else removeFirst() 후 append
2-2. 가득 차지 않았다면 그냥 append
정답코드:
func solution(_ cacheSize:Int, _ cities:[String]) -> Int {
var cities = cities.map({$0.uppercased()})
var caches = [String]()
var answer = 0
for city in cities {
if caches.contains(city) { answer += 1 }
else { answer += 5 }
if caches.count >= cacheSize {
if cacheSize != 0 { // cacheSize가 0이면 removeFirst()에서 error
if caches.contains(city) {
for (i, e) in caches.enumerated() {
if e == city {
caches.remove(at: i)
caches.append(city)
break;
}
}
}
else {
caches.removeFirst()
caches.append(city)
}
}
} else {
caches.append(city)
}
}
return answer
}
'Algorithm' 카테고리의 다른 글
프로그래머스 괄호 회전하기 [Swift] (0) | 2021.11.17 |
---|---|
[Swift] 프로그래머스 멀쩡한 사각형 풀이 (0) | 2021.10.22 |
Programmers 쿼드압축 후 개수 세기 [Swift] (0) | 2021.09.15 |
프로그래머스 - 최솟값 만들기 [Swift] (0) | 2021.09.15 |
프로그래머스 - 괄호 변환 Swift (0) | 2021.09.07 |
최근댓글