https://programmers.co.kr/learn/courses/30/lessons/17680
음.. 말도 안되게 이상하게 푼 것 같아서 다시 풀러 갈겁니다... 95점이에요 그리고 ㅜ
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0; int idxOf = 0;
int idx = 0; int min = 0; int cacheCount = 0;
int[] cacheIdx = new int[cacheSize];
String[] cache = new String[cacheSize];
int check=0;
if(cacheSize == 0){
return cities.length * 5;
}
for(int i=0; i<cities.length; i++){
if(!Arrays.asList(cache).contains(cities[i].toUpperCase())){ // cache miss
answer += 5;
// 여기부터는 캐시가 교체 되어야 한다.
if(cacheCount == cacheSize){
for(int j=0; j<cacheIdx.length; j++){
if(0 == cacheIdx[j]){
min = j; // 최소값의 idx를 지정
}
}
cache[min] = cities[i].toUpperCase();
cacheIdx[min] = cacheSize;
for(int k=0; k<cacheIdx.length; k++){
if(cacheIdx[k] == 0){}
else {
cacheIdx[k] -= 1;
}
}
} else { // 처음에 캐시를 채울 때, 이 때 동일한게 들어오는 경우는 따로 에러 처리 해줘
cache[idx] = cities[idx].toUpperCase();
cacheIdx[idx] = idx;
cacheCount++;
idx++;
}
} else { // cache hit
answer += 1;
for(int n = 0; n<cacheCount; n++){
if(cache[n].equals(cities[i].toUpperCase())){
idxOf = n;
}
}
if(cacheCount == cacheSize){
check = cacheIdx[idxOf];
cacheIdx[idxOf] = cacheSize;
} else {
cacheIdx[idxOf] = idx;
for(int j=0; j<cacheIdx.length; j++){
if(0 == cacheIdx[j]){
min = j; // 최소값의 index를 지정
}
}
}
for(int k=0; k<cacheCount; k++){
// if(cacheIdx[k] == 0){}
// else {
// cacheIdx[k] -= 1;
// }
if(check < cacheIdx[k])
cacheIdx[k] -= 1;
}
}
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 - 오픈채팅방 (1) | 2020.03.28 |
---|---|
프로그래머스 - 캐시(성공) (0) | 2020.03.28 |
프로그래머스 - 뉴스 클러스터링 (0) | 2020.03.27 |
프로그래머스 - 예상대진표 (0) | 2020.03.26 |
프로그래머스 - 124 나라의 숫자 (0) | 2020.03.21 |