Skip to content

Commit ead55a6

Browse files
committed
[level 2] Title: [1차] 캐시, Time: 33.40 ms, Memory: 124 MB -BaekjoonHub
1 parent eb765e3 commit ead55a6

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
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
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int solution(int cacheSize, String[] cities) {
5+
Queue<String> cache = new LinkedList<>();
6+
7+
int execTime = 0;
8+
9+
if(cacheSize == 0){
10+
return cities.length * 5;
11+
}
12+
13+
for(int i=0; i<cities.length; i++){
14+
String city = cities[i].toLowerCase();
15+
16+
//cache hit
17+
if(cache.contains(city)){
18+
cache.remove(city);
19+
cache.offer(city);
20+
execTime+=1;
21+
}else{
22+
if(cache.size() == cacheSize){ //캐시 꽉참(LRU로 교체)
23+
cache.poll();
24+
}
25+
cache.offer(city);
26+
27+
execTime+=5;
28+
}
29+
}
30+
31+
32+
return execTime;
33+
}
34+
}

0 commit comments

Comments
 (0)