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)
*/