Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 개발자
- Linux
- 스타트업
- 스프링 부트
- docker
- 이직
- 인텔리제이
- 자료구조
- HTTP
- 구름LEVEL
- 해결
- dfs
- HashMap
- 프로그래머스
- IntelliJ
- 스프링
- 주니어
- 문자열
- 해시맵
- 구현
- 코딩테스트
- 백엔드
- spring
- bfs
- 도커
- Java
- 스프링부트
- spring boot
- 명령어
- 배열
Archives
- Today
- Total
마이의 개발 블로그
[프로그래머스] 캐시 (Java) 본문
반응형
Least Recently Used (LRU) 캐시 알고리즘을 구현하는 문제로 특이사항은 없었다.
- cacheSize가 0인 경우 전부 miss이므로 (5 * cities 배열 길이) 반환
- cache로 사용할 LinkedList 선언
- cities를 탐색하며
1) 도시 이름 city 소문자로 변경
2) cache를 탐색하며 hit인 경우 현재 위치의 city 제거 후 0번 위치에 city삽입, isHit true로 변경 (시간: 1)
3) miss인 경우(!hit) cache가 찼는지를 확인하여 마지막(가장 안 쓰인) cache제거 후 city 삽입 (시간: 5)
Note
- 자바 컬렉션 LinkedList가 애초에 Doubly Linked List로 구현되어있다는 걸 이번에 알게되었다.
import java.util.*;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
if(cacheSize == 0){
return cities.length * 5;
}
List<String> cache = new LinkedList<String>();
for(String city : cities){
city = city.toLowerCase();
Boolean isHit = false;
for(int i = 0; i < cache.size(); i++){
if(cache.get(i).equals(city)){
cache.remove(i);
cache.add(0, city);
isHit = true;
answer += 1;
break;
}
}
if(!isHit){
if(cache.size() == cacheSize){
cache.remove(cacheSize - 1);
}
cache.add(0, city);
answer += 5;
}
}
return answer;
}
}
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 유한소수 판별하기 (Java) (0) | 2023.02.22 |
---|---|
[프로그래머스] 롤케이크 자르기 (Java) (0) | 2023.02.21 |
[프로그래머스] 카드 뭉치 (Java) (0) | 2023.02.18 |
[프로그래머스] 큰 수 만들기 (Java) (0) | 2023.02.16 |
[프로그래머스] 마법의 엘리베이터 (Java) (0) | 2023.02.14 |
Comments