Daily LeetCode Challenge - 1146. Snapshot Array

Min Young Kim·2023년 6월 11일
0

algorithm

목록 보기
169/198

Problem From.
https://leetcode.com/problems/snapshot-array/

오늘 문제는 snapShotArray 를 만드는 클래스를 구현하는 문제였다.

이 클래스에는 3가지 method 가 있는데,
set 은 array 의 index 를 주어진 value 값으로 초기화한다.
snap 은 지금까지 실행된 총 snap 수의 -1 을 리턴한다.
get 은 snapshot index 에 저장된 value 값을 리턴한다.

이 문제는 각각의 인덱스에 값을 저장할때, value 값과 snap_id 를 같이 저장하는게 핵심이었는데, 이를 위해서 map 을 사용하였다.
처음에 set 해줄때, 해당 인덱스에 key 값을 snap_id 로 하여 value 를 저장해주었다.

snap 에서는 현재 snap_id 를 반환한 뒤 snap_id 를 1 증가시켜주었다.

get 에서는 주어진 index 와 snap_id 를 통해서 해당 값의 바로 밑에 있는 value 값을 가져오도록 구현하였다.

import java.util.*

class SnapshotArray(length: Int) {

    private val snaps = Array(length) { TreeMap<Int, Int>() }
    private var snapId: Int = 0

    fun set(index: Int, value: Int) {
        snaps[index][snapId] = value
    }

    fun snap(): Int {
        return snapId++
    }

    fun get(index: Int, snap_id: Int): Int {
        val versions = snaps[index]
        return versions.floorEntry(snap_id)?.value ?: 0
    }

}

/**
 * Your SnapshotArray object will be instantiated and called as such:
 * var obj = SnapshotArray(length)
 * obj.set(index,`val`)
 * var param_2 = obj.snap()
 * var param_3 = obj.get(index,snap_id)
 */
profile
길을 찾는 개발자

0개의 댓글