Foma's ํ์ด
๋ฌธ์ ํ์ด
๋จผ์ ์ฒซ๋ฒ์งธ๋ก LRU๊ฐ ๋ฌด์์ธ์ง ์์๋ด์ผํ ํ ๋ฐ์.
LRU๋? -> Least Recently Used ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ ๊ต์ฒดํ๋ค๋ ๋ป์ ๋๋ค.
์ฆ, ๊ฐ์ฅ ์ค๋๋ ๊ฒ์ ์ ๊ฑฐํ๋ค๋ ๋ป์ ๋๋ค.
์ด ์๋ฆฌ๋ฅผ ์ ์ฉํ๋ฉด ์๋ก์ด ๊ฐ์ด ๋ค์ด์์๋ ๊ฐ์ฅ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ์ ๊ฑฐ๋๊ณ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค์
์๋ก์ด ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
์์๋ก ์์๋ณด๋ฉด 3์ข ๋ฅ๊ฐ ๋ค์ด๊ฐ ์ ์๋ ๋์๋ค์ (1)์ ์ฃผ,(2)ํ๊ต,(3)๋ด์์ด ๋ด๊ฒจ์๊ณ ์์ธ์ด๋ผ๋ ์๋ก์ด ๋์๋ฅผ ๋ฃ์ผ๋ ค๊ณ ํ๋ฉด
๋งจ ๋ง์ง๋ง์ ๋ด์์ด ๋๊ฐ๊ณ ๋งจ ์ฒซ๋ฒ์งธ์ ์์ธ์ด ์ถ๊ฐ๋์ด (1)์์ธ,(2)์ ์ฃผ,(3)ํ๊ต๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ cacheSize๋ ๋์์ ์ข ๋ฅ๋ฅผ ์ผ๋งํผ ๋ด์ ์ ์๋๊ฐ์ ๋๋ค.
์ฆ, cacheSize๊ฐ 3์ด๋ผ๋ฉด 3๊ฐ์ง ์ข ๋ฅ์ ๋์๋ฅผ ๋ด์ ์ ์๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์๋ก์ด ๋์๊ฐ ๋ค์ด์ฌ ๋ ๋ง์ฝ ์ด๋ฏธ ๊ทธ ๋์๊ฐ ๋ด๊ฒจ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ด ๊ฒฝ์ฐ์๋ ๋์๋ค์์ ์๋ ๊ทธ ๋์๊ฐ ์๋ ์์๊ฐ ์ญ์ ๋๊ณ ๋งจ ์ฒซ๋ฒ์งธ์ ๋์๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
์์ ์์์ ๊ฐ์ด ๋์๋ค์ (1)์ ์ฃผ,)(2)ํ๊ต,(3)๋ด์์ด ๋ด๊ฒจ์๊ณ ํ๊ต๋ผ๋ ์๋ ์๋ ๋์๋ฅผ ๋ฃ์ผ๋ ค๊ณ ํ๋ฉด
์๋ ์๋ ๋์๋ค์์ 2๋ฒ์งธ์ธ ํ๊ต๊ฐ ์ญ์ ๋๊ณ ๋งจ ์ฒซ๋ฒ์งธ์ ํ๊ต๊ฐ ์ถ๊ฐ๋์ด (1)ํ๊ต,)(2)์ ์ฃผ,(3)๋ด์์ด ๋ฉ๋๋ค.
์ด์ ๊ฐ์ด ์๋ ์๋ ๋์๋ฅผ ๋ฃ์ผ๋ฉด cache hit์ด๋ฉฐ ์ํ์๊ฐ์ด 1์ด ์ถ๊ฐ๋๋ ๊ฒ์ด๊ณ
์๋ก์ด ๋์๋ฅผ ๋ฃ์ผ๋ฉด cache miss๋ก ์ํ์๊ฐ์ด 5๊ฐ ์ถ๊ฐ๋๋ ๊ฒ์ ๋๋ค.
์ฝ๋ํ์ด
์บ์๋ค์ ๋ด์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ค๋๋ค. -> var cache = [String]()
์ํ์๊ฐ์ ์ ์ฅํ ๋ฐฐ์ด์ ๋ง๋ค์ด์ค๋๋ค. -> var time = 0
๋์๋ค(cities)๋ฅผ for๋ฌธ์ ์ด์ฉํ์ฌ ํ๋ํ๋ ์ดํด๋ด ๋๋ค. -> for city in cities { ... }
๋ฌธ์ ์์ ๋์๋ฌธ์ ๊ตฌ๋ณ์ ํ์ง์๋๋ค๊ณ ํ์ผ๋ฏ๋ก ๋์์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ์ต๋๋ค. -> let lowerCity = city.lowercased()
๋ง์ฝ cacheSize๊ฐ 0์ด๋ผ๋ฉด ๋์๋ค์ด ์ถ๊ฐ๋ ๋ ํญ์ cache miss์ด๋ฏ๋ก ์ํ์๊ฐ์ ๋์๋ค์ ๊ฐฏ์ ๊ณฑํ๊ธฐ 5๋ฅผ ํด์ค ๋ค for๋ฌธ์ ํ์ถํฉ๋๋ค. - > if cacheSize == 0 {
time = 5*cities.count
break
}
๋ง์ฝ ์บ์์์ ์ด๋ฏธ ๋์๊ฐ ์๋ค๋ฉด ํด๋น ์ธ๋ฑ์ค๋ฅผ ์ฐพ์์ ์ญ์ ํด์ค๋ค ์ํ์๊ฐ์ +1์ ํด์ค๋๋ค. -> if cache.contains(lowerCity) {
cache.remove(at: cache.firstIndex(of: lowerCity)!)
time += 1
}
๊ทธ๋ ์ง ์๊ณ (์๋ก์ด ๋์๋ผ๋ฉด) ์บ์๊ฐ ๊ฝ ์ฐผ์๋ ๊ฐ์ฅ ์ค๋๋ ๊ฐ์ ์ญ์ ํด์ค๋ค ์ํ์๊ฐ์ +1์ ํด์ค๋๋ค. ->
else{
if cache.count == cacheSize{
cache.removeLast()
}
time += 5
}
๊ทธ๋ฆฌ๊ณ ํฌํจ๋์๋ ์๋์๋ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ์ ๋์๋ฅผ ์ถ๊ฐํด์ค๋๋ค. -> cache.insert(lowerCity, at: 0)
๋ง์ง๋ง์ผ๋ก ์ํ์๊ฐ์ ๋ฐํํด์ค๋๋ค. -> return time
์ ์ฒด์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import Foundation
func solution(_ cacheSize:Int, _ cities:[String]) -> Int {
var cache = [String]()
var time = 0
for city in cities {
let lowerCity = city.lowercased()
if cacheSize == 0 {
time = 5*cities.count
break
}
if cache.contains(lowerCity) {
cache.remove(at: cache.firstIndex(of: lowerCity)!)
time += 1
}else{
if cache.count == cacheSize{
cache.removeLast()
}
time += 5
}
cache.insert(lowerCity, at: 0)
}
return time
}
|
์๋กญ๊ฒ ์๊ฒ๋๊ฒ
removeLast์ popLast์ ์ฐจ์ด
removeLast๋ ๋ง์ฝ ๋ฐฐ์ด์ ์๋ฌด๊ฒ๋ ์์ ๋ ์๋ฌ๊ฐ ๋์ง๋ง popLast๋ ์๋ฌด๊ฒ๋ ์์ผ๋ฉด nil๊ฐ์ ๋ฐํํ๋ค.
๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ธ๋ฑ์ค ์์๋ด๊ธฐ
firstIndex(of:value)
'๐ Problem Solution > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2018 KAKAO BLIND RECRUITMENT [1์ฐจ] ๋ด์ค ํด๋ฌ์คํฐ๋ง Swift (0) | 2020.10.20 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ์์ ๋ง๋ค๊ธฐ Swift (0) | 2020.10.19 |
ํ๋ก๊ทธ๋๋จธ์ค ์์ ๋์งํ Swift (0) | 2020.10.17 |
ํ๋ก๊ทธ๋๋จธ์ค ์ ํ์ ์๊ฐ์ด๋ Swift (0) | 2020.10.16 |
ํ๋ก๊ทธ๋๋จธ์ค JadenCase ๋ฌธ์์ด ๋ง๋ค๊ธฐ Swift (0) | 2020.10.10 |
๋๊ธ