1️⃣ 문제 설명

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

스크린샷 2022-07-14 오전 1.22.17.png


2️⃣ 풀이

//LRU 알고리즘
//get, put 있으면 키의 양수값, 없으면 -1
//캐시가 용량 한도에 도달하면 새 값을 삽입하기 전에 가장 최근에 사용되지 않은 값을 제거

//1. 대소문자 구분을 하지 않으므로 전체 문자열 소문자로 치환

//2. 캐시 역할을 할 cache 배열 생성

//3. 주어진 캐시 사이즈가 0일 경우, 얼리 리턴

//4-1. 도시가 캐시에 없고, 캐시에 남은 자리가 있을 경우 도시를 cache 배열에 넣고 answer + 5
//4-2. 도시가 캐시에 없고, 캐시에 남은 자리가 없을 경우 맨 앞의 도시를 빼고 해당 도시를 push 후 answer + 5

//5. 도시가 캐시에 존재할 경우 recently used이므로 캐시의 마지막 자리로 이동 후 answer +1

3️⃣ 나의 코드

function solution(cacheSize, cities) {
	let answer = 0;
	//1.
	const lowered = cities.map((city) => city.toLowerCase());
	//2.
	let cache = [];
	//3.
	if (cacheSize === 0) return lowered.length * 5;

	lowered.forEach((city) => {
			//5.
		if (cache.includes(city)) {
			answer += 1;
			cache = cache.filter((v) => v !== city);
			cache.push(city);
		} else {
			//4-2.
			if (cache.length < cacheSize) {
				cache.push(city);
				answer += 5;
			} else {
			//4-1.
				cache.shift();
				cache.push(city);
				answer += 5;
			}
		}
	});
	return answer;
}

4️⃣ 마무리

처음에 보고 이게 뭐지 싶었는데 LRU 라는 개념을 알고나니 생각보다 쉽게 풀렸다

카카오는 이런 식으로 비전공자를 걸러내는 걸까..?

아무튼 조건들을 생각하며 코드를 작성하니 금방 풀렸고, 오랜만에 금방 풀린 문제여서 기분이 좋았다