๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Programmers)

[c++] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - [1์ฐจ] ์บ์‹œ(Level 2)

by ์•ˆ์ฃผํ˜• 2022. 4. 7.

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - [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

์ฝ”๋“œ

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(int cacheSize, vector<string> cities) {
    int answer = 0;
    
    vector<string>cache, v;
    
    for(string city:cities){
        v.push_back(city);
    }
    for(int i=0; i<v.size(); i++){
        for(int k=0; k<v[i].length(); k++){
            if(isupper(v[i][k])) v[i][k]+=32;   //๋Œ€๋ฌธ์ž๋ฉด์€ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ
        }
    }
    for(string city:v){
        
        if(cacheSize==0) answer+=5;
        
        else if(find(cache.begin(), cache.end(), city)==cache.end()){   // ํ˜„์žฌ ์บ์‹œ์— ์—†์„ ๋•Œ
            answer+=5;  // ์‹คํ–‰์‹œ๊ฐ„ ๊ฐฑ์‹ 
            if(cache.size()==cacheSize){
                cache.erase(cache.begin()); // ๊ฐ€์žฅ ์˜›๋‚ ์— ์“ฐ์ธ ์บ์‹œ ์‚ญ์ œ
                cache.push_back(city);
            }
            else if(cache.size()<cacheSize){ //  //์บ์‹œ๊ฐ€ ํ˜„์žฌ ๋‹ค ์ฐจ์ง€ ์•Š์•˜์„ ๋•Œ
                cache.push_back(city);  // ์บ์‹œ์— ์ถ”๊ฐ€
            }
        }
        
        else{   // ํ˜„์žฌ ์บ์‹œ์— ์žˆ์„ ๋•Œ
            answer+=1;  // ์‹คํ–‰์‹œ๊ฐ„ ๊ฐฑ์‹ 
            int cache_index = find(cache.begin(), cache.end(), city) - cache.begin();
            cache.erase(cache.begin()+cache_index);
            cache.push_back(city);    //์บ์‹œ ๊ฐฑ์‹ 
        }
    }
    return answer;
}

 

ํ’€์ด

์šด์˜์ฒด์ œ ๊ณต๋ถ€ํ•œ LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‚˜์™€์„œ ๋Š๋‚Œ์ด ์ƒˆ๋กœ์› ์Šต๋‹ˆ๋‹ค. LRU ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„์€ ์กฐ๊ธˆ ํ—ค๋งค์…จ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 

๋Œ“๊ธ€