[Java] ํ๋ก๊ทธ๋๋จธ์ค - ์บ์
[๋ฌธ์ ]
https://school.programmers.co.kr/learn/courses/30/lessons/17680?language=java
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
[ํ์ด]
์ฐ์ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์ LRU ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ์์์ผ ํ์ต๋๋ค.
LRU๋ Least Recently Used์ ์ฝ์๋ก, ์ฆ ๊ฐ์ฅ ์ค๋ซ๋์ ์ฐธ์กฐ๋์ง ์์ ์บ์๋ฅผ ๊ต์ฒดํ๋ ๋ฐฉ์์ ๋๋ค.
๋ง์ฝ ์บ์์ ์ฌ์ ์ ์ฅ๊ณต๊ฐ์ด ์๊ณ , ์บ์์ ํด๋น ๊ฐ์ด ์๋ค๋ฉด ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์๋ ์บ์๋ฅผ ๊ต์ฒดํ๋ ๊ฒ์ ๋๋ค.
๋ฐ๋ผ์ ์บ์๊ฐ ์ฐธ์กฐ๋ ์๊ฐ๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ถ์ด์ LinkedList<String> cache๋ฅผ ํตํด ์บ์๋ฅผ ๊ด๋ฆฌํ์์ต๋๋ค. ๋ง์ฝ ์ด๋ฏธ ์บ์์ ์๋ ๊ฐ์ ์ฌ์ฉํ๋ค๋ฉด ์ค๊ฐ์ ์๋ ์บ์๋ฅผ ๋งจ ๋ง์ง๋ง์ผ๋ก ์ด๋์์ผ์ผ ํ๋ฏ๋ก LinkedList๊ฐ ์ ํฉํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
cities[]๋ฅผ ํ์ํ๋ฉฐ, ํด๋น city๊ฐ ์บ์์ ์กด์ฌํ์ง ์๊ณ , ๋ง์ฝ ์บ์์ ์ฌ์ ์ ์ฅ๊ณต๊ฐ์ด ์๋ค๋ฉด ๊ฐ์ฅ ์ ๋ ธ๋๋ฅผ ์ญ์ ํ๊ณ ๋ง์ง๋ง ๋ ธ๋์ city๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. ๋ํ, ๋ง์ฝ city๊ฐ ์กด์ฌํ๋ค๋ฉด cache.indexOf(city)๋ฅผ ํตํด ํด๋น city์ index์ ๊ฐ์ ์ฐพ์ ์ญ์ ํ๊ณ ๋ง์ง๋ง ๋ ธ๋์ ๋์๋ฅผ ์ถ๊ฐํด์ฃผ์์ต๋๋ค.
[์ฝ๋]
import java.util.*;
class Solution {
public static int time = 0;
public static LinkedList<String> cache = new LinkedList<String>();
public int solution(int cacheSize, String[] cities) {
int answer = 0;
if(cacheSize == 0) {
answer = cities.length*5;
} else {
for(int i=0;i<cities.length;i++) {
String city = cities[i].toLowerCase();
int index = cache.indexOf(city);
// ํด๋น ๋์๊ฐ ์กด์ฌํ์ง ์์
if(index == -1) {
if(cache.size() == cacheSize) {
cache.removeFirst();
}
answer += 5;
} else {
cache.remove(index);
answer++;
}
cache.addLast(city);
}
}
return answer;
}
}