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 |
Tags
- N과M
- 티스토리챌린지
- map
- DP
- 유클리드호제법
- Sort
- vector
- 백준
- stoi
- C++
- int
- 에라토스테네스의 체
- 알고리즘
- priority_queue
- 깊이우선탐색
- 그래프
- 프로그래머스
- 배열
- 정렬
- 백트래킹
- DFS
- Set
- 분할정복
- 오블완
- 우선순위큐
- BFS
- 이분탐색
- 최소공배수
- 다이나믹프로그래밍
- 문자열
Archives
- Today
- Total
안녕 세상아,
[c++/프로그래머스] [1차] 캐시 본문
https://school.programmers.co.kr/learn/courses/30/lessons/17680
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. LRU 캐시 알고리즘 사용해서 풀면 된다.
--> LRU 캐시 알고리즘이란?
가장 최근에 사용되지 않은 캐시 데이터를 제거하는 방식의 캐시 교체 알고리즘
2. 선입선출을 생각했기 때문에 큐로 풀었지만,,굳이 큐로 풀지 않아도 될 것 같다. (다른 사람들이 푼거 보니 리스트 많이 사용 한듯)
3. 대소문자 구별하지 않는다고 했으니까 다 소문자로 바꿔준다. transform 사용
4. cities[i]가 캐시에 있을 때와 없을 때를 구분해서 풀어준다.
5. 캐시에 있을 때는 기존에 있던 캐시를 지워주고 맨 마지막에 다시 추가해준다. answer에 1을 더해준다. (cache hit)
6. 캐시에 없을 때는 가장 늦게 들어간 캐시를 지워주고 cities[i]를 추가해준다. answer에 5를 더해준다. (cache miss)
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <cctype>
using namespace std;
int solution(int cacheSize, vector<string> cities) {
int answer = 0;
queue<string> q;
for (int i = 0; i < cities.size(); i++) {
transform(cities[i].begin(), cities[i].end(), cities[i].begin(), ::tolower);
}
// 캐시 크기 만큼 도시 이름 넣고, 만약 새로 넣는 도시가 기존에 이미 있으면 + 1 (가장 최신으로 교체해야함)
// 새로 넣는 도시가 기존에 없으면 가장 오래된 도시 빼고 새로운 도시 넣고 +5
for (int i = 0; i < cities.size(); i++) {
bool isCache = false;
queue<string> tmpQ(q);
while (!tmpQ.empty()) {
if (cities[i] == tmpQ.front()) {
isCache = true;
break;
}
tmpQ.pop();
}
//이미 가지고 있을 때 (Cache hit)
if (isCache == true) {
answer += 1;
//기존 큐에서 지우고 새로운 큐 맨 마지막에 넣기
queue<string> hitQ;
while (!q.empty()) {
if (q.front() != cities[i]) {
hitQ.push(q.front());
}
q.pop();
}
q = hitQ;
q.push(cities[i]);
}
//없을 때 (Cache miss)
else {
answer += 5;
if (q.size() >= cacheSize && cacheSize > 0)
q.pop();
if (cacheSize > 0)
q.push(cities[i]);
}
}
return answer;
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스/c++] Lv2 피로도 (0) | 2024.10.20 |
---|---|
[c++/프로그래머스] Lv1 모의고사 (0) | 2024.10.17 |
[프로그래머스/c++] Lv2 기능개발 (0) | 2024.10.10 |
[프로그래머스/c++] Lv1 기사단원의 무기 (1) | 2024.10.09 |
[프로그래머스/c++] Lv2 의상 (2) | 2024.10.08 |