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 참고 했습니다..)