문제 › 090

090. LRU 캐시

Hard 바이브코딩 MCPDataStructureCache
문제 설명
[문제] LRU 캐시(Least Recently Used cache)를 제공하는 MCP 서버를 구현한다. 캐시는 키-값을 보관하는 임시 저장소인데, 자리가 정해져 있어 꽉 차면 무언가를 버려야 한다. LRU는 "가장 오래 안 쓴 것부터 버린다"는 규칙이다. 여기서 "쓴다"는 것은 값을 저장(put)하거나 조회(get)하는 것을 말한다. 이 캐시의 정원은 3이며, 정원을 넘기면 가장 오래 사용되지 않은 키를 내보낸다(evict). [구현할 함수] - put(key: str, value: str) -> int key에 value를 저장한다. 이 키를 "가장 최근 사용"으로 표시한다. 정원(3)을 넘기면 가장 오래 사용되지 않은 키를 하나 내보낸다. 저장 후 현재 캐시 크기를 반환한다. - get(key: str) -> str key의 값을 반환한다. 없으면 빈 문자열 ""을 반환한다. 조회에 성공하면 그 키를 "가장 최근 사용"으로 표시한다. - get_cache_state() -> array<string> 현재 캐시의 키 목록을 반환한다. 가장 최근 사용된 키가 맨 앞에 온다. 비어 있으면 빈 배열 []을 반환한다. [입력·상태] 서버는 최대 3개의 키-값을 유지하며, 각 키가 마지막으로 사용된 순서를 기억한다. 초기에는 비어 있다. [제약] - 정원(capacity)은 3으로 고정된다. - 키와 값은 문자열이다. - get_cache_state는 최근 사용 순(최근 → 오래된 순)으로 키를 나열한다. [예시] (각 예시는 초기 빈 상태에서 시작) put("a", "apple") -> 1 get("a") -> "apple" get("없음") -> "" put("a","A"); put("b","B"); put("c","C") get_cache_state() -> ["c", "b", "a"] # 가장 최근에 넣은 c가 맨 앞 put("a","A"); put("b","B"); put("c","C"); put("d","D") get_cache_state() -> ["d", "c", "b"] # 정원 초과로 가장 오래된 a가 빠짐 get_cache_state() -> [] # 빈 상태
로그인하고 풀기 AI가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.