728x90
간단할 꺼라 생각했던 문제인데 생각외로 많은 시간이 걸렸다.
링크드 리스트 구현에서 애먹을 줄은 몰랐다.
이럴땐 계속해서 고쳐나가기 보다, 처음부터 다시 짜보는게 더 빠를때도 있는게 그게 바로 오늘인듯 싶다.
class LRUCache : public Cache{
public :
LRUCache(int cpVal)
{
cp = cpVal;
}
void set(int key,int value){
Node *node = new Node(key,value);
if(mp.find(key) != mp.end())
{
Node *nodePtr = head;
while(nodePtr->key != node->key)
{
nodePtr = node->next;
}
nodePtr->prev->next = nodePtr->next;
nodePtr->next->prev = nodePtr->prev;
delete nodePtr;
head->prev = node;
node->next = head;
head = node;
}
else
{
if(mp.size() == cp)
{
node->next = head->next;
Node *tailBuf = tail;
mp.erase(tailBuf->key);
tail = tail->prev;
delete tailBuf;
}
else
{
if(mp.size() == 0)
{
head = node;
tail = node;
}
else
{
node->next = head->next;
}
}
head = node;
mp.insert(pair<int, Node*>(key, node));
}
}
int get(int key){
if(mp.find(key) != mp.end())
{
return mp.find(key)->second->value;
}
else
{
return -1;
}
}
};
728x90
'개발 공부 > 알고리즘' 카테고리의 다른 글
HackerRank, c++, Preprocessor Solution (0) | 2022.11.03 |
---|---|
HackerRank, c++, Cpp exception handling (0) | 2022.11.03 |
HackerRank , C++, Hotel Prices (0) | 2022.11.03 |
HackerRank C++, STL, Deque-STL (0) | 2022.11.02 |
HackerRank c++ - Virtual Functions (0) | 2022.10.21 |