Programmers [1차] 캐시, Javascript

cptkuk91·2022년 9월 23일
1

Algorithm

목록 보기
105/161

문제

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

개인 의견

정답임에도 불구하고, 테스트 케이스가 옳바르지 않은 경우가 있습니다..

코드

function solution(cacheSize, cities) {
	let result = 0;
    tmpCache = [];
    
    if(!cacheSize) return 5 * cities.length;
    
    cities.forEach((city) => {
    	city = city.toLowerCase();
        if(tmpCache.includes(city)){
        	tmpCache.splice(tmpCache.indexOf(city), 1);
            result += 1;
        }
        else {
			if(tmpCache.length === cacheSize) tmpCache.shift();
            result += 5;
        }
        tmpCache.push(city);
    });
    return result;
}

forEach 와 map의 차이에 대해서 알아야 합니다.
map의 경우 원본 배열에 변화를 주지 않고 새로운 배열을 만들어 반환합니다.
forEach의 경우 원본 배열 자체를 사용자가 원하는 형태로 변화를 줄 때 사용합니다.

cacheSize가 부족한 경우 5 * cities.length를 통해 쉽게 구할 수 있습니다.
tmpCache.includes(city)의 경우 ex) LA가 tmpCache에 담겨져 있는 상태에서 LA가 들어오는 경우입니다. (연속적으로)
그 외의 경우 tmpCache에 담겨져 있는 배열값을 shift()하면서 쳐내고 새로운 city값을 tmpCache에 push해줍니다.
그럼 마지막 city까지 가면서 result값을 구할 수 있습니다.
(어려웠습니다.. Reference 참고 했습니다..)

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글