[Programmers] [1차]캐시 - 2018 KAKAO BLIND RECRUITMENT

동민·2021년 3월 11일
0
import java.util.LinkedList;
import java.util.Queue;

// [1차]캐시 - 2018 KAKAO BLIND RECRUITMENT
public class Cache { // 캐시 LRU의 이론을 활용하면 어렵지 않은 문제
	public int solution(int cacheSize, String[] cities) {
		int answer = 0;
		Queue<String> cache = new LinkedList<>();

		if (cacheSize == 0) {
			return cities.length * 5;
		}

		for (String ele : cities) {
			ele = ele.toUpperCase();
			if (cache.isEmpty()) {
				cache.offer(ele);
				answer += 5;
			} else if (!cache.isEmpty() && cache.size() <= cacheSize) {
				if (cache.contains(ele)) { // cache hit
					answer++;
					int size = cache.size();
					for (int i = 0; i < size; i++) { // cache hit 시 hit된 원소는 큐의 가장 입구쪽으로 가야함
						if (cache.peek().equals(ele)) {
							cache.poll();
						} else {
							cache.offer(cache.poll());
						}
					}
				} else { // cache miss
					answer += 5;
					if (cache.size() == cacheSize) {
						cache.poll();
					}
				}
				cache.offer(ele);
			}
		}
		return answer;
	}
}
profile
BE Developer

0개의 댓글