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;
}