🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
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
|
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
LinkedList<String> cache = new LinkedList<>();
// 캐시 사이즈가 0인 경우 특수처리
if(cacheSize == 0)
return 5 * cities.length;
for(int i = 0 ; i < cities.length ; i++) {
String city = cities[i].toLowerCase();
// [cache hit]
if(cache.remove(city)) { // 기존 페이지 지우고,
cache.addFirst(city); // 이미 캐시에 있던 페이지 맨 앞으로 가져옴.
answer += 1;
}
else { // [cache miss]
int nowSize = cache.size();
if(nowSize == cacheSize) { // 캐시가 가득찬 경우, 맨 뒤 페이지 삭제
cache.pollLast(); // = remove(0)
}
cache.addFirst(city); // 맨 앞에 새 페이지 삽입
answer += 5;
}
}
return answer;
}
}
|
cs |
🧩 해결 아이디어
• 단순구현 & *LRU
(* LRU : 가장 오랫동안 참조하지 않은 페이지를 캐시에서 교체)
- 캐시 사이즈가 0인 경우, 모든 경우에 캐시 미스가 발생하므로 특수처리한다. (5 * 캐시사이즈)
- 0이 아닌 경우, cache hit과 cache miss로 나눠 생각한다.
ㄴ cache hit인 경우) 이미 캐시 리스트에 기존 페이지가 존재한다면 기존 페이지를 지우고, 이미 캐시에 있던 페이지를 맨 앞에 추가한다. & 정답 + 1
ㄴ cache miss인 경우) 캐시 리스트가 가득찬 경우, 맨 뒤 페이지를 삭제하고, 맨 앞에 새 페이지를 삽입한다. & 정답 + 5
🔺 다른 풀이들
- 복습은 이걸로 해야겠다... 과정은 같고 그냥 리스트를 활용하셨다.
& cache hit인지 확인하기 위해 cache.contains()를 사용하셨다.
프로그래머스 [1차] 캐시 JAVA
1. 문제 https://programmers.co.kr/learn/courses/30/lessons/17680 코딩테스트 연습 - [1차] 캐시 3 [Jeju, Pangyo, Seoul, NewYork, LA, Jeju, Pangyo, Seoul, NewYork, LA] 50 3 [Jeju, Pangyo, Seoul, Jeju, Pangyo, Seoul, Jeju, Pangyo, Seoul] 21 2 [Jeju
moon1226.tistory.com
import java.util.ArrayList;
class Solution {
public static int solution(int cacheSize, String[] cities) {
int answer = 0;
ArrayList<String> list = new ArrayList<String>();
if (cacheSize == 0)
return cities.length * 5;
for (int i = 0; i < cities.length; i++) {
cities[i] = cities[i].toUpperCase();
if (list.contains(cities[i])) {
answer++;
list.remove(cities[i]);
list.add(cities[i]);
} else {
answer += 5;
if (list.size() == cacheSize) {
list.remove(0);
list.add(cities[i]);
}
else
list.add(cities[i]);
}
}
return answer;
}
}
💬 느낀 점
흐 담엔 더 잘 풀장,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
✔ 정답 참고
[프로그래머스] 캐시 (Java)
프로그래머스 캐시구현은 어렵지 않은 문제였으나 LRU(Least Recently Used)에 대해서 알고있어야지만 풀 수 있는 문제였다. LFU와 헷갈려서 문제푸는데 시간이 조금 더 걸렸다.LRU(Least Recently Used) 가장
velog.io
✔ LRU 알고리즘
페이지 교체 알고리즘, LRU 캐시 교체 알고리즘이란? 캐시란?, Cache hit, Cache Miss
페이지 교체 알고리즘 LRU Least Recently Used 1. 개념 가장 최근에 사용되지 않은 것 페이지에서 ...
blog.naver.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 2] 연속된 부분 수열의 합 (JAVA) (1) | 2023.10.30 |
---|---|
[프로그래머스/Lv. 1] 대충 만든 자판(JAVA) (0) | 2023.10.26 |
[프로그래머스/Lv. 3] 여행경로 (JAVA) (0) | 2023.10.25 |
[프로그래머스/Lv. 2] 124 나라의 숫자 (JAVA) (0) | 2023.10.24 |
[프로그래머스/Lv. 2] 큰 수 만들기 (JAVA) (0) | 2023.10.20 |