문제설명 1차 캐시
캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다. cache hit일 경우 실행시간은 1이다. cache miss일 경우 실행시간은 5이다.
LRU(Least Recently Used) 알고리즘
cache size
naver.com(아이디/비번)
daum.com(아이디/비번)
tmon.com(아이디/비번)
kakao.com(아이디/비번)
line.com(아이디/비번)
시도) 네이버 로그인
캐시 메모리에 있을 경우
cache size
daum.com(아이디/비번)
tmon.com(아이디/비번)
kakao.com(아이디/비번)
line.com(아이디/비번)
naver.com(아이디/비번)
시도) aaa.com 시도
캐시 메모리에 없을 경우
cache size
daum.com(아이디/비번)
tmon.com(아이디/비번)
kakao.com(아이디/비번)
line.com(아이디/비번)
aaa.com(아이디/비번)
캐시 교체 알고리즘은 LRU(Least Recently Used)를 사용한다.cache hit일 경우 실행시간은 1이다.cache miss일 경우 실행시간은 5이다.1. 만약 cachSize가 0이면 전체 시티*5 2. 소문자로 모두 변경 3. 해당 값을 찾으면 해당 값을 지워주고 새로 추가해주며 answer++ 해준다. 4-1. 해당 값을 못찾았는데 cache가 여유있다. 그냥 pushBack, answer+5 4-2. 해당 값을 못찾았는데 cache가 없다. 맨 처음 값 삭제 후 pushBack, answer+5
소스코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(int cacheSize, vector<string> cities) {
int answer = 0;
if(cacheSize == 0){
answer = cities.size()*5;
return answer;
}
vector<string> cache;
for(int i =0; i<cities.size();i++){
string check = cities[i];
transform(check.begin(),check.end(),check.begin(),::tolower); //소문자 변환
auto it = find(cache.begin(), cache.end(), check);
//찾으면 it(이터레이터가 끝까지 안가면 해당 값을 찾은 것)
if(it != cache.end()){
cache.erase(it);
cache.push_back(check);
answer++;
}else{
//캐시에 빈자리 있음
if(cache.size() < cacheSize){
cache.push_back(check); //마지막에 넣어준다.
//캐시에 빈자리 없음
}else{
cache.erase(cache.begin()+0); // 젤 처음 지우고
cache.push_back(check); //마지막에 넣어준다.
}
answer+=5;
}
}
return answer;
}