https://school.programmers.co.kr/learn/courses/30/lessons/17680
import java.util.ArrayList;
public class 캐시 {
public static void main(String[] args) {
int cacheSize = 2;
String[] cities = {"Jeju", "Pangyo", "NewYork", "newyork"};
ArrayList<String> list = new ArrayList<>();
String[] lowerCities = new String[cities.length];
int answer = 0;
// lowerCase 변경
for (int i = 0; i < cities.length; i++) {
lowerCities[i] = cities[i].toLowerCase();
}
// 2. case 사이즈 체크
if (cacheSize != 0) {
for (String city : lowerCities) {
if (list.size() < cacheSize) {
if (list.contains(city)) {
answer += 1;
list.remove(city);
list.add(city);
} else {
list.add(city);
answer += 5;
}
} else {
if (list.contains(city)) {
answer += 1;
list.remove(city);
list.add(city);
} else {
list.remove(0);
answer += 5;
list.add(city);
}
}
}
} else {
answer = 5 * (cities.length);
}
System.out.println(list.toString());
System.out.println(answer);
}
}
import java.util.ArrayList;
class Solution {
public int solution(int cacheSize, String[] cities) {
ArrayList<String > list = new ArrayList<>();
int answer = 0;
if (cacheSize != 0) { // cacheSize 체크
for (int i = 0; i < cities.length; i++) {
// 대소문자 구분 X
cities[i] = cities[i].toLowerCase();
// cities 포함 여부 확인
if(list.contains(cities[i])){
answer += 1;
list.remove(cities[i]);
list.add(cities[i]);
}
else {
answer += 5;
if(list.size()<cacheSize) list.add(cities[i]);
else {
list.remove(0);
list.add(cities[i]);
}
}
}
} else {
answer = 5 * (cities.length);
}
return answer;
}
}
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;
}
}
캐시 hit, miss, 캐시 교체 알고리즘 LRU(Least Recently Used)을 직접 구현한 경험!
분기문을 몇번을 탄거야..
1) cacheSize 체크
2) ArrayList.contains()는 대소문자 구분 필수
이래서 유효성검사를 하는구나 싶고
리펙토링 해봤는데 다른분의 풀이를 보니 그 분 풀이가 더 깔끔한 것 같다. 먼저 짧은건 위에 짧게 적어주고 길어지는 부분은 아래로 내려야지 가독성이 더 좋은느낌.
그래도 처음으로 스스로 풀어낸 Lv.2다! 뿌듯하다!
분기문 처리 할 때 더 깔끔하게 쓸 수 있는 방법을 생각하며 코드를 짜자. 이 부분이 약한 것 같다.
공감하며 읽었습니다. 좋은 글 감사드립니다.