https://school.programmers.co.kr/learn/courses/30/lessons/17680#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
/*
캐쉬는 큐를 이용한다.
hit 이면 캐쉬가 변하지 안고
miss 이면 가장 먼저 들어간 도시가 변경된다.
*/
// if(cacheSize==0) return cities.length*5;
// int answer = 0;
// Queue<String> queue = new LinkedList<>();
// if(cacheSize>=cities.length){
// for(int i=0; i<cities.length; i++){
// queue.add(cities[i]);
// answer+=5;
// }
// }
// else {
// for(int i=0; i<cacheSize; i++){
// queue.add(cities[i]);
// answer+=5;
// }
// }
// label : for(int i=cacheSize; i<cities.length; i++){
// for(String item : queue){
// if(cities[i].equalsIgnoreCase(item)){
// answer++;
// continue label;
// }
// }
// queue.poll();
// queue.add(cities[i]);
// answer+=5;
// }
// return answer;
/*
첫 풀이는 너무 단순하게 생각했다. 큐에서 먼저 들어온 걸 빼는게 LRU를 달성하는 것은
아니었다.!!
*/
if(cacheSize==0) return cities.length*5;
int answer = 0;
Queue<String> queue = new LinkedList<>();
if(cacheSize>=cities.length){
for(int i=0; i<cities.length; i++){
queue.add(cities[i]);
answer+=5;
}
}
else {
for(int i=0; i<cacheSize; i++){
queue.add(cities[i]);
answer+=5;
}
}
label : for(int i=cacheSize; i<cities.length; i++){
for(String item : queue){
if(cities[i].equalsIgnoreCase(item)){
answer++;
queue.remove(item);
queue.add(item);
continue label;
}
}
queue.poll();
queue.add(cities[i]);
answer+=5;
}
return answer;
}
}
가능한 모든 경우를 생각하는 것이 쉽지가 않은 것 같다.
캐쉬 사이즈가 0인 경우, 캐쉬 사이즈보다 입력이 더 적은 경우 등을 스스로 생각하지 못하고 질문하기를 보며 알게 되었다.
캐쉬 사이즈보다 입력이 더 적은 경우를 해결하지 못한 상태이다.
다시 풀어볼 예정이다.
'알고리즘 > 문제' 카테고리의 다른 글
| *[프로그래머스] Lv2 위장 / JAVA (0) | 2023.03.13 |
|---|---|
| [프로그래머스] Lv2 행렬의 곱셈 / JAVA (0) | 2023.03.09 |
| [프로그래머스] Lv2 괄호 회전하기 / JAVA (0) | 2023.03.08 |
| [프로그래머스] Lv2 멀리뛰기 / JAVA (0) | 2023.03.06 |
| [프로그래머스] Lv2 점프와 순간이동 / JAVA (0) | 2023.03.04 |
