[LeetCode, java] - Snapshot Array

jinvicky·2024년 9월 5일
0

ALG

목록 보기
61/62

특정 배열의 인덱스별로 스냅샷을 생성하는 클래스를 구현하는 문제이다.

TreeMap이라는 자료구조가 생소했는데 이번에 floorEntry() 메서드로 새로 학습했다.

floorEntry는 같거나 가장 큰 key=value 엔트리를 반환한다.

문제 풀면서 snap()의 구현이 너무 심플해서 충격받았음;;

        snapshot.put(snapId, val); // snap()에서만 할 것이라고 생각했던 action이 set()에서 하네

난 snap()에서 for문을 돌려가면서 put하는 것이라고 생각했는데
그랬더니 바로 시간 초과나더라고...

그래도 이진 탐색 분류치고 로직은 덜 어렵다.


import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class SnapshotArray2 {

    private int snapId;

    private List<TreeMap<Integer, Integer>> snapshots;

    public SnapshotArray2(int length) {
        snapId = 0;
        snapshots = new ArrayList<>(); // 초기화

        for(int i = 0; i < length; i++) {
            TreeMap<Integer, Integer> map = new TreeMap<>();
            map.put(0,0);
            snapshots.add(map);
        }
    }
    public void set(int index, int val) {
        TreeMap<Integer, Integer> snapshot = snapshots.get(index);
        snapshot.put(snapId, val);
    }

    public int snap() {
        return snapId++; // 이게 가장 충격임... 걍 ++이 끝이라구요..?
    }

    public int get(int index, int snap_id) {
        TreeMap<Integer, Integer> snapshot = snapshots.get(index);
        Map.Entry<Integer, Integer> entry = snapshot.floorEntry(snap_id);
        return entry.getValue();
    }
}
profile
일단 쓰고 본다

0개의 댓글