티스토리 뷰
https://leetcode.com/problems/design-hashmap/
1. 문제분석
HashMap 직접 구현 -> MyHashMap 클래스 -> 빈 맵 생성
-> void put(int key, int value) -> 삽입, 이미 존재하면 덮어쓰기
-> int get(int key) -> 맵핑된 value, 없으면 -1 리턴
-> void remove(key) -> 존재하면 제거
특이사항은 없고 그냥 내장 클래스 구현 문제, 이터러블 구현은 필요없어 보임
key, value 값 범위는 0~100만, 오퍼레이션은 최대 10,000개
2. 풀어보기
['MyHashMap','put','put','get','get','put','get','remove','get']
[[],[1,1],[2,2],[1],[3],[2,1],[2],[2],[2]]
-> [null,null,null,1,-1,null,1,null,-1]
3. 슈도코드
사실 이 코드 그대로 써도 Accepted 뜸 -> 언어 내장 해시를 사용하지 않고 구현하는 문제
class MyHashMap {
private map;
constructor() {
this.map = new Map<number, number>()
}
put(key: number, value: number): void {
this.map.set(key, value);
}
get(key: number): number {
return this.map.get(key) ?? -1;
}
remove(key: number): void {
this.map.delete(key);
}
}
4. 구현코드
class MyHashMap; // 해시 구현은 https://ha2el.tistory.com/26 참고
5. 풀이회고
기본적인 해시테이블 자료구조를 구현해보는 문제였다.
이해하고 있는 자바 해시맵을 기본으로 하되, 해시충돌은 리스트 체이닝으로만 구현했다.
이런 코드를 쓸 일이 있을 지는 모르겠지만, 혹시라도 응용할 일이 생기면 해당 코드 기반으로 구현해보자.
'자료구조 & 알고리즘 > LeetCode' 카테고리의 다른 글
feat: [Med.] Cheapest Flights Within K Stops (JS/TS) (0) | 2024.06.11 |
---|---|
feat: [Med.] Network Delay Time (JS/TS) (0) | 2024.06.10 |
feat: [Med.] Course Schedule (JS/TS) (0) | 2024.06.08 |
feat: [Hard] Reconstruct Itinerary (JS/TS) (1) | 2024.06.08 |
feat: [Med.] Combination Sum (JS/TS) (1) | 2024.06.06 |