Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 오류
- windows forms
- 기타 연주
- C
- Linux
- OpenCV
- pandas
- pytorch
- 프로그래머스
- paramiko
- Python
- Numpy
- Docker
- error
- SSH
- 채보
- YOLO
- C#
- ubuntu
- Visual Studio
- Selenium
- LIST
- C++
- VS Code
- 명령어
- label
- pip
- mysql
- JSON
- 핑거스타일
Archives
- Today
- Total
기계는 거짓말하지 않는다
[Programmers] 캐시 본문
프로그래머스 - 캐시 문제 입니다.
일반적인 캐시와 캐시 교체 정책을 생각하면됩니다. LRU 교체 정책이므로
cache hit이면 항상 앞으로 옮겨주고 miss이면 cache가 가득 찼을 경우
맨 뒤의 요소를 제거 후 가장 앞에 현재 데이터를 넣습니다.
앞, 뒤 삽입, 삭제가 빈번하므로 list 사용
#include <string>
#include <vector>
#include <list>
using namespace std;
int solution(int cacheSize, vector<string> cities) {
int answer = 0, i, j;
list<string> cache;
list<string>::iterator itr;
bool find = false;
for(i = 0; i < cities.size(); i++) {
for(j = 0; j < cities[i].length(); j++) { // 소문자 초기화
cities[i][j] = tolower(cities[i][j]);
}
for(itr = cache.begin(); itr != cache.end(); itr++) {
if(*itr == cities[i]) { // 캐시에 있는 데이터와 같음 (캐시히트)
cache.erase(itr); // 삭제 후
cache.push_front(cities[i]); // 가장 앞으로
find = true;
answer += 1;
break;
}
}
if(find == false) { // 캐시에 데이터가 없음 (캐시미스)
if(cacheSize != 0) {
if(cache.size() == cacheSize) cache.pop_back(); // 캐시가 가득 찼을 경우, 가장 오래된 데이터 삭제
cache.push_front(cities[i]); // 가장 앞으로
}
answer += 5;
}
find = false;
}
return answer;
}
'Programming Test' 카테고리의 다른 글
[Programmers] 등굣길 (0) | 2021.05.02 |
---|---|
[Programmers] 이진 변환 반복하기 (0) | 2021.04.30 |
[Programmers] 124 나라의 숫자 (0) | 2021.04.29 |
[Programmers] 튜플 (0) | 2021.04.27 |
[Programmers] 야근 지수 (0) | 2021.04.26 |
Comments