https://school.programmers.co.kr/learn/courses/30/lessons/17680
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
cpp
닫기#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <list>
using namespace std;
#define CACHE_HIT 1
#define CACHE_MISS 5;
class LRU
{
public:
explicit LRU(int n)
{
        LRUMaxSize = n;
        LRUTime = 0;
    }
    void refer(string n)
{
        // 캐시 내에 없을 경우
        if (LRUMap.find(n) == LRUMap.end())
        {
            // 캐시가 꽉 찼을 경우
            if (LRUList.size() >= LRUMaxSize)
            {
                // 리스트에서 가장 오래 사용되지 않은 요소 pop
                LRUMap.erase(LRUList.front());
                // 참조도 함께 삭제
                LRUList.pop_front();
            }
            LRUTime += CACHE_MISS;
        }
        // 캐시 내에 있을 경우 해당 요소 삭제
        else
        {
            LRUList.erase(LRUMap[n]);
            LRUTime += CACHE_HIT;
        }
        // 새로운 요소 x를 push, 참조도 updqte
        LRUList.push_back(n);
        LRUMap[n] = --LRUList.end();
    }
    int GetTime() noexcept { return LRUTime; }
private:
    list<string> LRUList; // 데이터를 저장할 list
    unordered_map<string, list<string>::iterator> LRUMap; // 참조를 저장할 map
    int LRUMaxSize; // 최대 용량
    int LRUTime; // 실행시간
};
int solution(int cacheSize, vector<string> cities) {
    if (!cacheSize) return cities.size() * CACHE_MISS;
    
    LRU lru(cacheSize);
    for_each(cities.begin(), cities.end(), [&](auto& str) 
    { 
        transform(str.begin(), str.end(), str.begin(), ::tolower);
        lru.refer(str); 
    });
    return lru.GetTime();
}
GitHub - developeSHG/Algorithm-Baekjoon_Programmers: 백준 and 프로그래머스 소스코드
백준 and 프로그래머스 소스코드. Contribute to developeSHG/Algorithm-Baekjoon_Programmers development by creating an account on GitHub.
github.com
'Coding Test > Programmers' 카테고리의 다른 글
| [Programmers] (2019 카카오 개발자 겨울 인턴십) Lv 2. 튜플 (0) | 2023.06.16 | 
|---|---|
| [Programmers] (해시) Lv 2. 의상 (0) | 2023.06.15 | 
| [Programmers] Lv 2. 행렬의 곱셈 (0) | 2023.06.14 | 
| [Programmers] (월간 코드 챌린지 시즌3) Lv 2. n^2 배열 자르기 (0) | 2023.06.13 | 
| [Programmers] Lv 2. 연속 부분 수열 합의 개수 (0) | 2023.06.12 | 
댓글