[ํ๋ก๊ทธ๋๋จธ์ค] ๐จ๐ป ์บ์ - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
๐จโ๐ป ์บ์(cache) ๋ฌธ์ ํ์ด๋ณด๊ธฐ
๐ ๋์ ์ฝ๋
def solution(cacheSize, cities):
time = 0
cache = []
cities = [city.lower() for city in cities]
if cacheSize != 0:
for city in cities:
if city in cache:
cache.pop(cache.index(city))
cache.append(city)
time += 1
else:
if len(cache) < cacheSize:
cache.append(city)
time += 5
else:
cache.pop(0)
cache.append(city)
time += 5
else: time += len(cities) * 5
return time
์ฐ์ ์ด ๋ฌธ์ ์์ ์ฌ์ฉ ๋ ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ธ LRU
(Least Recently Used) ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ์์์ผ ํฉ๋๋ค. ์บ์์ ์ฌ์ด์ฆ๋ ํ์ ๋์ด์๊ธฐ ๋๋ฌธ์ ์บ์ ์ฌ์ด์ฆ๊ฐ ๊ฝ ์ฐฌ ์ํ์์ ์๋ก์ด ์บ์๋ฅผ ๋ฃ์ผ๋ ค๋ฉด ๊ธฐ์กด ์บ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ต์ฒดํด์ผํ๋ ๋ฐ ์ฌ๊ธฐ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ต์ฒดํ ๊ฒ์ธ๊ฐ๊ฐ ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ๋ชฉ์ ์
๋๋ค. LRU
์๊ณ ๋ฆฌ์ฆ์ ์ง์ญํ์๋ฉด ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋์ง ์์ ๊ฒ ์ฆ, ๊ฐ์ฅ ์ค๋์ ์ ์ฌ์ฉํ ๊ฒ์ ์ ๊ฑฐํ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ์ ๊ฐ์ค์ ์ค๋ซ๋์ ์ฌ์ฉํ์ง ์์๋ ๋ฐ์ดํฐ๋ ์์ผ๋ก๋ ์ฌ์ฉํ ํ๋ฅ ์ด ์ ๋ค๋ ๊ฒ์
๋๋ค.
cities = [city.lower() for city in cities]
์์ ์ค๋ช ์ ๋ฐ๋ผ์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ ์ ๋ ฅ ํ์์์ ๋์๋ฌธ์ ๊ตฌ๋ถ์ ํ์ง ์๋๋ค๋ผ๋ ์กฐ๊ฑด์ ์ฃผ์์ผ๋ ๋ฌธ์ ๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ์ ๋ ฅ๋ ๋ฐฐ์ด ์ ๋ฌธ์์ด์ ์๋ฌธ์๋ก ๋ฐ๊ฟ์ค๋๋ค. ๋ฆฌ์คํธ ์ถ์ฝ(List Comprehension)์ ํตํด ์ฝ๋๋ฅผ ์ข ๋ ๊ฐ๋จํ ํ์ต๋๋ค.
์ด์ ๋ฌธ์ ๊ฐ ๋จ์ํ๋์์ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ผ๋ฉฐ ์บ์๋ฅผ ์ฑ์๊ฐ๋ ๊ณผ์ ์ ์งํํฉ๋๋ค. ํฐ ๋ถ๊ธฐ๋ cacheSize
์ ํฌ๊ธฐ๊ฐ 0์ธ์ง ์์ด ์๋ ์ง๋ก ๋๋๋๋ค. 0์ธ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ cache miss
๋ก ํ๋ณ๋์ด ์ ์ฒด ๋์ ๋ฐ์ดํฐ ๊ธธ์ด * 5
๋งํผ ์คํ์๊ฐ์ด ๋์ด๋ฉ๋๋ค.
if city in cache:
cache.pop(cache.index(city))
cache.append(city)
time += 1
๋ค์์ 0์ด ์๋ ๊ฒฝ์ฐ์
๋๋ค. 0์ด ์๋ ๊ฒฝ์ฐ ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์๊ฐ๋ ์ํ์ ์งํํ๊ฒ๋ฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ ๋์ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์บ์ ์์ ์๋ ๊ฒฝ์ฐ์ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ก ๋ถ๊ธฐ๊ฐ ์๊น๋๋ค. ๊ฐ์ ๋์ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์บ์ ์์ ์๋ ๊ฒฝ์ฐ ์บ์์ ์๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์์๊ณ ๊ฐ์ ๋์ ๋ฐ์ดํฐ๋ฅผ cache
๋ฐฐ์ด์ ๋งจ ๋ค์ ์ถ๊ฐํ๊ณ , cache hit
์ด๊ธฐ ๋๋ฌธ์ ์คํ์๊ฐ์ธ time
์ 1
์ ๋ํด์ค๋๋ค.
๊ฐ์ ๋์ ๋ฐ์ดํฐ๊ฐ ์บ์ ์์ ์๋ ๊ฒฝ์ฐ์๋ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์บ์์ ๋ฃ์ด์ผํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์๋ ์บ์๊ฐ ๊ฝ ์ฐฌ ๊ฒฝ์ฐ์ ๊ฝ ์ฐจ์ง ์์ ๊ฒฝ์ฐ๋ก ๋๋ ์ ํ์ธํฉ๋๋ค. ์บ์๊ฐ ๊ฝ ์ฐฌ๊ฒฝ์ฐ LRU
์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ๊ฐ์ฅ ์ค๋ซ๋์ ์ฐ์ด์ง ์์ cache
๋ฐฐ์ด์ 0
๋ฒ index๋ฅผ pop
ํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์บ์ ๋ฐฐ์ด ๋งจ ๋ค์ ์ถ๊ฐํด์ค๋๋ค. ์บ์๊ฐ ๊ฝ ์ฐจ์ง ์์ ๊ฒฝ์ฐ์๋ ์บ์์ ๊ต์ฒด ์์ด ์๋ก์ด ๋ฐ์ดํฐ๋ง ์ถ๊ฐํด์ค๋๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ์ ๋์ ๋ฐ์ดํฐ๊ฐ ์บ์ ์์ ์๋ cache miss
์ด๊ธฐ ๋๋ฌธ์ ์คํ ์๊ฐ time
์ 5
๋ฅผ ๋ํด์ค๋๋ค.
์ด๋ ๊ฒ ๊ณ์ฐ๋ ์คํ์๊ฐ time
์ ๋ฐํํ๋ฉด ๋ฌธ์ ๋ ๋ง๋ฌด๋ฆฌ๋ฉ๋๋ค.
Written with StackEdit.
'Algorithm > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[ํ๋ก๊ทธ๋๋จธ์ค] ๐งฑ ํ๋ ์ฆ 4 ๋ธ๋ก - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
[ํ๋ก๊ทธ๋๋จธ์ค] ๐งฑ ํ๋ ์ฆ 4 ๋ธ๋ก - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
2019.02.14 -
[ํ๋ก๊ทธ๋๋จธ์ค] ๐ฉ๐ผ ๋ด์ค ํด๋ฌ์คํฐ๋ง - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python / KAKAO BLIND RECRUITMENT
[ํ๋ก๊ทธ๋๋จธ์ค] ๐ฉ๐ผ ๋ด์ค ํด๋ฌ์คํฐ๋ง - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python / KAKAO BLIND RECRUITMENT
2019.02.14 -
[ํ๋ก๊ทธ๋๋จธ์ค] ๐ฏ ๋คํธ ๊ฒ์ - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
[ํ๋ก๊ทธ๋๋จธ์ค] ๐ฏ ๋คํธ ๊ฒ์ - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
2019.02.12 -
[ํ๋ก๊ทธ๋๋จธ์ค] ๐บ ๋น๋ฐ์ง๋ - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
[ํ๋ก๊ทธ๋๋จธ์ค] ๐บ ๋น๋ฐ์ง๋ - [1์ฐจ] 2018 ์นด์นด์ค ๋ธ๋ผ์ธ๋ ์ฑ์ฉ / Python
2019.02.12