못풀었음.
https://programmers.co.kr/learn/courses/30/lessons/17680

답 풀이
#include <string>
#include <vector>
#include <deque>
using namespace std;
int solution(int cacheSize, vector<string> cities) {
int answer = 0;
deque<string> dTemp;
for (int i = 0; i < cities.size(); i++)
{
string sTemp = cities[i];
for (int j = 0; j < sTemp.size(); j++)
{
sTemp[j] = tolower(sTemp[j]);//일단 소문자로 전부 변환한다.
}
int flag(0);
int order(0);
for (int j = 0; j < dTemp.size(); j++, order++)
{
if (sTemp == dTemp[j])
{
flag = 1;
break;
}
}
if (flag == 1)//이때 hit 인 경우
{
dTemp.erase(dTemp.begin() + order);
dTemp.push_back(sTemp);
answer += 1;
}
else//이때 miss 경우
{
if (dTemp.size() >= cacheSize)
{
dTemp.pop_front();
}
dTemp.push_back(sTemp);
answer += 5;
}
}
return answer;
}
버그유발
else//이때 miss 경우
{
if (dTemp.size() >= cacheSize)
{
dTemp.pop_front();
}
dTemp.push_back(sTemp);
answer += 5;
}
이런경우 size() = 0일때 pop 하는경우 core dump로 버그잡을수가 없게됨.
이런 CPU문제에 설명이 불충분해서 다른사람 풀이 참고했음.
1. 프로세스 max탑재가능한 수 정해놓고 max 넘어서면 pop_front
2. 중복 프로세스 들어오면 push_Back하고(앞에 deque설정 해놓고 덱안에 있는지 탐색한다), 기존에 있던거 erase