[프로그래머스 C++] [1차] 캐시
[프로그래머스 C++] [1차] 캐시
https://school.programmers.co.kr/learn/courses/30/lessons/17680
해결전략
cache 캐시
Least Recently Used Algorithm, LRU 알고리즘
대문자 -> 소문자 변환, tolower, islower
소문자 -> 대문자 변환, toupper, isupper
LRU 알고리즘 참고 링크
https://dailylifeofdeveloper.tistory.com/355
코드
#include <string>
#include <vector>
using namespace std;
int solution(int cacheSize, vector<string> cities) {
int time = 0;
//cacheSize = 0인 경우 예외처리
if (cacheSize == 0)
return cities.size() * 5;
//대문자 -> 소문자 변환
for (int i = 0; i < cities.size(); i++) {
for (int j = 0; j < cities[i].size(); j++)
{
if (isupper(cities[i][j])) //대문자라면
cities[i][j] = tolower(cities[i][j]); //대문자를 소문자로 변환
}
}
vector<string> LRU(cacheSize);
for (int i = 0; i < cities.size(); i++)
{
int pos = -1;//pos변수 추가. 중복값이 있을때 위치를 알려주는 변수
for (int j = 0; j < cacheSize; j++) { //cache를 순회하며 검색
if (cities[i] == LRU[j]) //캐시배열(=LRU)에 cities[i]값(=도시이름)이 있다면
pos = j;
}
//cache miss
if (pos == -1) {
for (int j = cacheSize - 1; j >= 1; j--) {
LRU[j] = LRU[j - 1]; //끝부터 1번 위치까지 한칸씩 뒤로 밀어준다.
}
time += 5;
}
//cache hit
else{
for (int j = pos; j >= 1; j--) {
LRU[j] = LRU[j - 1]; //끝부터 pos위치까지 한칸씩 뒤로 밀어준다.
}
time += 1;
}
LRU[0] = cities[i]; //0번 위치(=첫 위치)에 cities[i]값을 넣어준다.
}
return time;
}
유사문제
37번
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] n^2 배열 자르기 (0) | 2023.09.13 |
---|---|
[프로그래머스 C++] 피보나치 수 (0) | 2023.09.12 |
[프로그래머스 C++] 할인행사 (0) | 2023.09.10 |
[프로그래머스 C++] H-Index (0) | 2023.09.08 |
[프로그래머스 C++] 괄호 회전하기 (0) | 2023.09.07 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] n^2 배열 자르기
[프로그래머스 C++] n^2 배열 자르기
2023.09.13 -
[프로그래머스 C++] 피보나치 수
[프로그래머스 C++] 피보나치 수
2023.09.12 -
[프로그래머스 C++] 할인행사
[프로그래머스 C++] 할인행사
2023.09.10 -
[프로그래머스 C++] H-Index
[프로그래머스 C++] H-Index
2023.09.08