algorithm

[프로그래머스] 캐시 (C++)

지제로 2022. 9. 25. 10:45

풀이과정

1. 모든 문자열을 소문자로 바꿔준다.

2. find함수를 이용하여 현재 v에 있는지 없는지 확인한다.

3. 있다면 hit으로 해당 위치에 있는 문자열을 지우고 다시 넣는다.

4. 없다면 miss로 현재 v 사이즈에 따라서 그냥 넣을지, 삭제하고 넣을지를 결정한다.

 

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

using namespace std;

int solution(int cacheSize, vector<string> cities) {
    int answer = 0;
    vector<string> v;
    
    for(int i=0;i<cities.size();i++){
        for(int j=0;j<cities[i].length();j++)
            cities[i][j]=tolower(cities[i][j]);
    }
    
    for(int i=0;i<cities.size();i++){
        auto a=find(v.begin(), v.end(), cities[i]);
        if(a==v.end()){ //안에 넣는 것이 없는 경우 
           answer+=5; 
            if(v.size()<cacheSize) //더 넣을 수 있는 경우 
                v.push_back(cities[i]);
            else if(v.size()==cacheSize && cacheSize!=0){ //가득찬 경우 
                v.erase(v.begin());
                v.push_back(cities[i]);
            }
        }else{
            answer+=1;
            v.erase(find(v.begin(), v.end(), cities[i]));
            v.push_back(cities[i]);
        }
    }
    return answer;
}