Menu
CoddyTech

LRU Cache

최대 capacity개의 키를 저장하는 캐시를 만드세요. get key는 해당 키의 값을 반환하고, 캐시에 없으면 -1을 반환합니다. put key value는 값을 저장하며, 기존 값이 있으면 바꿉니다. 키가 새 키이고 캐시가 가득 찬 경우, 가장 오랫동안 사용되지 않은 키를 먼저 제거합니다. 키를 찾은 get과 모든 put은 사용으로 간주합니다.

연산 i는 키 keys[i]에 대한 ops[i]("get" 또는 "put")이며, 값은 values[i]입니다(get의 경우 0). 빈 캐시에서 연산을 순서대로 실행하고, 각 연산마다 문자열 하나를 반환하세요. put의 경우 "null"을, get의 경우 값 또는 "-1"을 반환합니다.

함수

lruCacheOps(capacity: integer, ops: string-array, keys: integer-array, values: integer-array) → string-array
capacityinteger
캐시가 한 번에 보유할 수 있는 최대 키 개수
opsstring-array
연산이 실행되는 순서
keysinteger-array
각 연산이 작동하는 키
valuesinteger-array
각 put의 값, 각 get의 경우 0
반환값string-array
연산마다 답 하나를 텍스트로

제약 조건

  • 1 ≤ capacity ≤ 3000
  • 1 ≤ ops.length ≤ 3000
  • keys.length == values.length == ops.length
  • 모든 ops[i]는 get 또는 put입니다.
  • 0 ≤ keys[i] ≤ 109
  • 0 ≤ values[i] ≤ 109는 put의 경우이고, get의 경우에는 values[i] == 0입니다.

예제

입력
capacity = 2ops = ["put", "put", "get", "put", "get", "get"]keys = [1, 2, 1, 3, 2, 3]values = [10, 20, 0, 30, 0, 0]
출력
["null", "null", "10", "null", "-1", "30"]
설명
get으로 인해 키 1이 가장 최근에 사용된 키가 되므로, put 3은 키 2를 제거합니다. get 2는 "-1"을 반환하고 get 3은 "30"을 반환합니다.
challenge icon

후속 질문

캐시가 가장 적게 사용된 키를 대신 제거하도록 어떻게 바꾸고, 사용 빈도가 같으면 가장 오랫동안 사용되지 않은 키를 제거하면서 각 작업을 O(1)에 수행할 수 있을까요?

코드 초기화
def lruCacheOps(capacity, ops, keys, values):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자들

capacity = 2
ops = ["put", "put", "get", "put", "get", "get"]
keys = [1, 2, 1, 3, 2, 3]
values = [10, 20, 0, 30, 0, 0]

예상 출력

["null", "null", "10", "null", "-1", "30"]