알맹이방
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 캐시 - java 본문
프로그래머스 구글링 안 하고 혼자 힘으로 2시간 반동안 걸림! 뿌듯하다!
이해가 안 가는 부분이 있으면 댓글로 문의해주세요
import java.util.LinkedList;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
LinkedList <String> lru = new LinkedList<String>();
int size= 0;
int time=0;
for(int i =0; i<cities.length; i++){
if(cacheSize==0){ //캐쉬 사이즈가 0이면
time=cities.length*5;
}
else if(cacheSize>0){//캐쉬 사이즈가 0보다 크다면
if(size==0){ //캐쉬가 비어있다면
lru.add(cities[i]);
time++;
size++;
}
else{ //캐쉬가 비어있지 않다면
boolean flag = false; //캐쉬 안에 해당 city가 이미 있었는지 없었는지의 flag
for(int j =0; j<lru.size(); j++){
if(lru.get(j).equalsIgnoreCase(cities[i])){ //대소문자 구분 없이 있으면
lru.remove(j); //원래 있던 거 지우고
lru.add(cities[i]); //새로운 거 넣고
time++; //cache hit
flag=true; //있었다
break;
}
}
if(flag==false){ //만약 이미 city가 캐쉬에 없었으면
if(size<cacheSize){ //캐쉬 공간이 남으면
lru.add(cities[i]); //그냥 넣고
size++;
time++;
}
else{ //남은 공간이 없으면
lru.pop(); //오래된 거 하나 지우고
lru.add(cities[i]); //city 넣기
time+=5;//cache miss
}
}
}
}
// System.out.println(lru);
}
time+=cacheSize*4; //<<<이 부분이 왜인지 아직 모르겠다. LRU에 대해 더 찾아보자
answer=time;
return answer;
}
}
아래는 문제풀면서 고쳐왔던 코드들 (순서X)
import java.util.LinkedList;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
LinkedList <String> lru = new LinkedList<String>();
int size= 0;
int time=0;
for(int i =0; i<cities.length; i++){
if(cacheSize==0){ //캐쉬 사이즈가 0이면
time=cities.length*5;
}
else if(cacheSize>0){//캐쉬 사이즈가 0보다 크다면
if(size==0){ //캐쉬가 비어있다면
lru.add(cities[i]);
size++;
}
else{ //캐쉬가 비어있지 않다면
boolean flag = false;
for(int j =0; j<lru.size(); j++){
if(lru.get(j).equalsIgnoreCase(cities[i])){
lru.remove(j);
lru.add(cities[i]);
flag=true;
break;
}
}
if(flag==false){
if(size<cacheSize){
lru.add(cities[i]);
size++;
}
else{
lru.pop();
lru.add(cities[i]);
}
}
}
}
System.out.println(lru);
}
return answer;
}
}
import java.util.LinkedList;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
LinkedList <String> lru = new LinkedList<String>();
int size= 0;
int time=0;
for(int i =0; i<cities.length; i++){
if(cacheSize==0){ //캐쉬 사이즈가 0이면
time=cities.length*5;
}
else if(cacheSize>0){//캐쉬 사이즈가 0보다 크다면
if(size==0){ //캐쉬가 비어있다면
lru.add(cities[i]);
size++;
}
else{ //캐쉬가 비어있지 않다면
if(lru.contains(cities[i])){ //캐쉬 안에 이미 값이 있는지 탐색
int j=0;
while(j<lru.size()){
if(lru.get(j)==cities[i]){
break;
}
else{
j++;
continue;
}
}
lru.remove(j);
lru.add(cities[i]);
size++;
}
else{ //캐쉬 안에 해당 값이 없다면
if(size<cacheSize){
lru.add(cities[i]);
size++;
}
else{
lru.pop();
lru.add(cities[i]);
size++;
}
}
}
}
System.out.println(lru);
}
return answer;
}
}
'알고리즘 > [2020] 프로그래머스' 카테고리의 다른 글
[프로그래머스] 124 나라의 숫자 - java (0) | 2020.04.20 |
---|---|
[프로그래머스] 기능개발 - java (0) | 2020.04.20 |
[프로그래머스] 프린터 - java (0) | 2020.04.15 |
내가 보려고 올리는 정리 (0) | 2020.04.15 |
[프로그래머스] 쇠막대기 - java (0) | 2020.04.14 |
Comments