갓생사는 김초원의 개발 블로그
chocho_log
갓생사는 김초원의 개발 블로그
전체 방문자
오늘
어제
  • 분류 전체보기 (76)
    • 개발 (22)
      • Spring (4)
      • Java (3)
      • Database (2)
      • Elasticsearch (3)
      • ETC (3)
      • JPA (3)
      • 이슈 (1)
    • 코딩 테스트 (43)
      • 프로그래머스 (23)
      • 백준 (12)
      • TIP (8)
    • 자료구조 (2)
    • 알고리즘 (4)
    • 잡생각 (0)
    • 경험 (3)
      • AWS re:Invent 2024 (3)

블로그 메뉴

    공지사항

    인기 글

    태그

    • Spring Boot Embedded Tomcat
    • Lazy Loading
    • 지연로딩
    • jar
    • querydsl
    • jpa
    • 디자인패턴 #SOLID 원칙
    • war

    최근 댓글

    최근 글

    갓생사는 김초원의 개발 블로그

    chocho_log

    코딩 테스트/프로그래머스

    [프로그래머스][LEVEL2] 캐시 - JAVA

    2021. 7. 22. 07:49

    [문제]

    • 2018 KAKAO BLIND RECRUITMENT 출제 

    https://programmers.co.kr/learn/courses/30/lessons/17680

     

    코딩테스트 연습 - [1차] 캐시

    3 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] 50 3 ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] 21 2 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Ro

    programmers.co.kr

     

    [풀이]

    <사전 지식>

    1. LRU 캐시 알고리즘의 동작 방법을 알고 있어야 한다. 

    https://programmer-chocho.tistory.com/14

     

    LRU(Least Recently Used) 캐시 알고리즘

    LRU 캐시 알고리즘 - Least Recently Used (가장 최근에 사용한) - 가장 오래전에 참조된, 덜 최근에 사용된 데이터를 내쫓는다. 최근에 참조된 것이 가까운 미래에 참조될 가능성이 높은 성질을 이용한

    programmer-chocho.tistory.com

     

    2. 캐시 용어

    • Cache Hit: CPU가 참조하고자 하는 메모리가 캐시안에 존재하는 경우
    • Cache Miss: CPU가 참조하고자 하는 메모리가 캐시안에 없는 경우

     

    [코드]

    - Queue를 이용했다. 

    package com.algorithm.kakaoTest.three;
    
    import java.util.LinkedList;
    import java.util.Queue;
    
    /**
     * 캐시
     * 소요시간: 21분 36초
     */
    public class Test01 {
        public static void main(String[] args) {
            int cacheSize = 2;
            String[] cities = {"Jeju", "Pangyo", "NewYork", "newyork"};
    
            int answer = solution(cacheSize, cities);
            System.out.println(answer);
        }
    
        public static int solution(int cacheSize, String[] cities) {
            int answer = 0;
            Queue<String> cache = new LinkedList<>();
    
            // 캐시 크기가 0이면 항상 캐시 miss이므로 모든 수행시간이 5초임
            if (cacheSize == 0) {
                return cities.length * 5;
            }
    
            for (int i = 0; i < cities.length; i++) {
                String city = cities[i].toLowerCase();
    
                if (!cache.contains(city)) { // 캐시 miss
                    answer = answer + 5;
                    if (cache.size() == cacheSize) {
                        cache.poll();
                    }
                } else { // 캐시 hit
                    answer = answer + 1;
                    cache.remove(city);
                }
                cache.add(city);
            }
            return answer;
        }
    }

     

    '코딩 테스트 > 프로그래머스' 카테고리의 다른 글

    [프로그래머스] 무지의 먹방 라이브 - JAVA  (0) 2021.08.02
    [프로그래머스][Level4] 자동완성 - JAVA  (0) 2021.07.24
    [프로그래머스] [Level2] 프렌즈4블록 - JAVA  (0) 2021.07.14
    [프로그래머스][Level3] 자물쇠와 열쇠 - JAVA  (1) 2021.05.24
    [프로그래머스][Level3][Java]징검다리 건너기  (0) 2021.03.24
      '코딩 테스트/프로그래머스' 카테고리의 다른 글
      • [프로그래머스] 무지의 먹방 라이브 - JAVA
      • [프로그래머스][Level4] 자동완성 - JAVA
      • [프로그래머스] [Level2] 프렌즈4블록 - JAVA
      • [프로그래머스][Level3] 자물쇠와 열쇠 - JAVA
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그
      갓생사는 김초원의 개발 블로그 github: https://github.com/kimchowon

      티스토리툴바