728x90
반응형
[프로그래머스] 17680 : 캐시 [JAVA] Lv.2
1. 준비
대소문자 구분하지 않으므로, 주어진값을 모두 소문자로 변경한 후 계산해야 한다. 그리고 casheSize가 0인 경우에는 하나도 저장할 수 없으니 cities 크기만큼 * 5 해주면 된다.
2. 캐시 입출력
이 문제는 deque 를 사용하면 쉽게 풀 수 있다.
ArrayDeque<String> cache = new ArrayDeque<>();
cache.contains(city) <-- city 포함하고 있는지 여부
cache.remove(city) <-- 맨 앞에 나오는 city 삭제
cache.poll(); <-- 맨 앞에꺼 꺼내기
cache.offer(city); <-- 맨 뒤로 넣기
문제 풀이 설명 (summary)
- Deque를 활용하여 cities 값을 하나씩 검증하여 추가한다.
- 같다면, 카운트를 + 1 해준다. 이전의 같은 값을 삭제하고 새로 city값을 추가해준다
- 같지 않다면, 카운트를 +5 하고 가장 먼저 추가한 값을 삭제하고, city값을 추가해준다.
- 만약에 casheSize만큼 채워지지 않았다면 꺼내지 않아도 된다.
- 위 방식으로 모든 city를 순회하면 문제풀이 끝
문제 풀이 접근법
- Deque를 활용 (양방향 큐/스택)
풀이 코드 (Code)
import java.util.ArrayDeque;
public class Main {
public static void main(String[] args) {
int cacheSize = 3;
String[] cities = new String[]{"Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"};
System.out.println(solution(cacheSize, cities));
}
public static int solution(int cacheSize, String[] cities) {
int time = 0;
// 예외케이스
if (cacheSize == 0) {
return cities.length * 5;
}
ArrayDeque<String> cache = new ArrayDeque<>();
for (String city : cities) {
city = city.toLowerCase();
if (cache.contains(city)) { // cache hit
cache.remove(city);
time += 1;
} else { // cache miss
if (cache.size() == cacheSize) {
cache.poll();
}
time += 5;
}
cache.offer(city);
}
return time;
}
}
문제 링크 (Link)
https://school.programmers.co.kr/learn/courses/30/lessons/17680
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
728x90
반응형
'알고리즘 > 깊이 우선 탐색 (DFS)' 카테고리의 다른 글
[프로그래머스] 389480 : 완전범죄 [JAVA] Lv.2 (1) | 2025.04.13 |
---|