|
| 1 | +# [level 2] [1차] 캐시 - 17680 |
| 2 | + |
| 3 | +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/17680) |
| 4 | + |
| 5 | +### 성능 요약 |
| 6 | + |
| 7 | +메모리: 124 MB, 시간: 33.40 ms |
| 8 | + |
| 9 | +### 구분 |
| 10 | + |
| 11 | +코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT |
| 12 | + |
| 13 | +### 채점결과 |
| 14 | + |
| 15 | +정확성: 100.0<br/>합계: 100.0 / 100.0 |
| 16 | + |
| 17 | +### 제출 일자 |
| 18 | + |
| 19 | +2026년 02월 14일 16:54:41 |
| 20 | + |
| 21 | +### 문제 설명 |
| 22 | + |
| 23 | +<h2>캐시</h2> |
| 24 | + |
| 25 | +<p>지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다.<br> |
| 26 | +이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다.<br> |
| 27 | +어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시작하였고, 제이지는 DB 캐시를 적용하여 성능 개선을 시도하고 있지만 캐시 크기를 얼마로 해야 효율적인지 몰라 난감한 상황이다.</p> |
| 28 | + |
| 29 | +<p>어피치에게 시달리는 제이지를 도와, DB 캐시를 적용할 때 캐시 크기에 따른 실행시간 측정 프로그램을 작성하시오.</p> |
| 30 | + |
| 31 | +<h3>입력 형식</h3> |
| 32 | + |
| 33 | +<ul> |
| 34 | +<li>캐시 크기(<code>cacheSize</code>)와 도시이름 배열(<code>cities</code>)을 입력받는다.</li> |
| 35 | +<li><code>cacheSize</code>는 정수이며, 범위는 0 ≦ <code>cacheSize</code> ≦ 30 이다.</li> |
| 36 | +<li><code>cities</code>는 도시 이름으로 이뤄진 문자열 배열로, 최대 도시 수는 100,000개이다.</li> |
| 37 | +<li>각 도시 이름은 공백, 숫자, 특수문자 등이 없는 영문자로 구성되며, 대소문자 구분을 하지 않는다. 도시 이름은 최대 20자로 이루어져 있다.</li> |
| 38 | +</ul> |
| 39 | + |
| 40 | +<h3>출력 형식</h3> |
| 41 | + |
| 42 | +<ul> |
| 43 | +<li>입력된 도시이름 배열을 순서대로 처리할 때, "총 실행시간"을 출력한다.</li> |
| 44 | +</ul> |
| 45 | + |
| 46 | +<h3>조건</h3> |
| 47 | + |
| 48 | +<ul> |
| 49 | +<li>캐시 교체 알고리즘은 <code>LRU</code>(Least Recently Used)를 사용한다.</li> |
| 50 | +<li><code>cache hit</code>일 경우 실행시간은 <code>1</code>이다.</li> |
| 51 | +<li><code>cache miss</code>일 경우 실행시간은 <code>5</code>이다.</li> |
| 52 | +</ul> |
| 53 | + |
| 54 | +<h3>입출력 예제</h3> |
| 55 | +<table class="table"> |
| 56 | + <thead><tr> |
| 57 | +<th>캐시크기(cacheSize)</th> |
| 58 | +<th>도시이름(cities)</th> |
| 59 | +<th>실행시간</th> |
| 60 | +</tr> |
| 61 | +</thead> |
| 62 | + <tbody><tr> |
| 63 | +<td>3</td> |
| 64 | +<td>["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"]</td> |
| 65 | +<td>50</td> |
| 66 | +</tr> |
| 67 | +<tr> |
| 68 | +<td>3</td> |
| 69 | +<td>["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"]</td> |
| 70 | +<td>21</td> |
| 71 | +</tr> |
| 72 | +<tr> |
| 73 | +<td>2</td> |
| 74 | +<td>["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"]</td> |
| 75 | +<td>60</td> |
| 76 | +</tr> |
| 77 | +<tr> |
| 78 | +<td>5</td> |
| 79 | +<td>["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"]</td> |
| 80 | +<td>52</td> |
| 81 | +</tr> |
| 82 | +<tr> |
| 83 | +<td>2</td> |
| 84 | +<td>["Jeju", "Pangyo", "NewYork", "newyork"]</td> |
| 85 | +<td>16</td> |
| 86 | +</tr> |
| 87 | +<tr> |
| 88 | +<td>0</td> |
| 89 | +<td>["Jeju", "Pangyo", "Seoul", "NewYork", "LA"]</td> |
| 90 | +<td>25</td> |
| 91 | +</tr> |
| 92 | +</tbody> |
| 93 | + </table> |
| 94 | +<p><a href="http://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/" target="_blank" rel="noopener">해설 보러가기</a></p> |
| 95 | + |
| 96 | + |
| 97 | +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges |
0 commit comments