본문으로 바로가기

PGMS 캐시

category Algorithm/PGMS 2022. 1. 10. 23:06

https://programmers.co.kr/learn/courses/30/lessons/17680

 

코딩테스트 연습 - [1차] 캐시

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", "Ro

programmers.co.kr

function solution(cacheSize, cities) {
	var answer = 0;
	let cache = [];
	if (cacheSize == 0) return cities.length * 5;
	cities.forEach((a) => {
		let item = a.toLowerCase();
		if (cache.includes(item)) {
			let index = cache.indexOf(item);
			cache.splice(index, 1);
			cache.push(item);
			answer += 1;
		} else {
			if (cache.length >= cacheSize) {
				cache.shift();
			}
			cache.push(item);
			answer += 5;
		}
	});
	return answer;
}

 

케이스를 나눠야하는데

 

1. 캐쉬에 포함되어있는 단어라면

배열에 들어있는 단어를 제외하고 새로 넣어준다. (LRU이므로)

2. 캐쉬에 없는 경우

 

2-1. 배열 사이즈 미만이면

새 값을 push한다

2-2. 배열 사이즈 이상이면

가장 첫 값을 제외하고 새 값을 push한다.

 

중요한 것은

cache.length>= cacheSize

에서 cacheSize가 0인 경우에는 제대로 동작하지 않으므로 예외처리를 해주어야한다.

 

예외처리 하지 않으면

["LA", "LA"]인 경우 cacheSize가 0이지만 cache에 push되어 6이 됨.(올바른 답은 10)

'Algorithm > PGMS' 카테고리의 다른 글

PGMS - 소수찾기  (0) 2022.01.13
PGMS 점프와 순간이동  (0) 2022.01.10
PGMS 전력망을 둘로 나누기  (0) 2022.01.10
PGMS 거리두기 확인하기  (0) 2021.12.29
PGMS 메뉴 리뉴얼  (0) 2021.12.29