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

문제설명
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;
}

+ Recent posts