기술 블로그

캐시 본문

알고리즘 문제/Programmers

캐시

parkit 2019. 8. 23. 16:19
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/17680




2018년 카카오 블라인드 코딩 테스트




캐시 사이즈가 0일 때는 cities.size() * 5를 return 하면 된다.






캐시.xlsx









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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <bits/stdc++.h>
 
using namespace std;    
 
map<intstring> m;
 
int solution(int cacheSize, vector<string> cities) 
{
    int answer = 0, t = 1;
 
    if (cacheSize == 0)
        return cities.size() * 5;
    
    for (auto now : cities)
    {
        string uppernow = "";
 
        for (auto i : now)
            uppernow += toupper(i);
 
        // 꽉 찬 경우
        if (m.size() == cacheSize)
        {
            bool hit = false;
 
            for (auto i : m)
                if (i.second == uppernow)
                {
                    answer += 1// 캐시 히트
                    hit = true
                    m.erase(i.first); // 삭제하고
                    m[t] = uppernow; // 새로운 시간(키값)에 대한 uppernow 추가
                    break;
                }
 
            if (!hit) // 캐시 히트가 아니라면, 교체 발생(= 캐시 미스)
            {
                for (auto i : m)
                {
                    m.erase(i.first); // 가장 오래 사용되지 않은 것 제거
                    break;
                }
 
                m[t] = uppernow; // 추가
                answer += 5;
            }
        }
        else // 아직 공간이 있는 경우
        {
            bool hit = false;
 
            for (auto i : m) // 이미 있는지 검사
                if (i.second == uppernow) // 있다면, 캐시 히트
                {
                    answer += 1// 캐시 히트
                    hit = true;
                    m.erase(i.first); // 시간 갱신을 위해 제거
                    m[t] = uppernow; // 새로운 시간에 대해 다시 추가
                    break;
                }
            
            if (!hit) answer += 5, m[t] = uppernow; // 캐시 미스
        }
 
        ++t;
    }
 
    return answer;
}
 
int main(void)
{
    /*vector<string> cities = {
        "Jeju", 
        "Pangyo", 
        "Seoul", 
        "Jeju", 
        "Pangyo", 
        "Seoul", 
        "Jeju", 
        "Pangyo", 
        "Seoul"
    };*/
 
    /*vector<string> cities = {
        "Jeju",
        "Pangyo",
        "Seoul",
        "NewYork",
        "LA",
        "Jeju",
        "Pangyo",
        "Seoul",
        "NewYork",
        "LA"
    };*/
 
    /*vector<string> cities = {
    "Jeju",
    "Pangyo",
    "NewYork",
    "newyork"
    };*/
 
    vector<string> cities = {
        "Aa",
        "aa",
        "Bb",
        "bB",
        "C"
    };
 
    printf("%d\n", solution(0, cities));
    
    return 0;
}
cs






















728x90
반응형

'알고리즘 문제 > Programmers' 카테고리의 다른 글

후보키  (0) 2019.08.23
실패율  (0) 2019.08.23
오픈채팅방  (0) 2019.08.23
등굣길  (0) 2019.05.26
네트워크  (0) 2019.05.23