706. Design HashMap
https://leetcode.com/problems/design-hashmap/description/
Design a HashMap without using any built-in hash table libraries.
Implement the MyHashMap class:
MyHashMap() initializes the object with an empty map.
void put(int key, int value) inserts a (key, value) pair into the HashMap. If the key already exists in the map, update the corresponding value.
int get(int key) returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key.
void remove(key) removes the key and its corresponding value if the map contains the mapping for the key.
Example 1:
Input
["MyHashMap", "put", "put", "get", "get", "put", "get", "remove", "get"]
[[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]]
Output
[null, null, null, 1, -1, null, 1, null, -1]
Explanation
MyHashMap myHashMap = new MyHashMap();
myHashMap.put(1, 1); // The map is now [[1,1]]
myHashMap.put(2, 2); // The map is now [[1,1], [2,2]]
myHashMap.get(1); // return 1, The map is now [[1,1], [2,2]]
myHashMap.get(3); // return -1 (i.e., not found), The map is now [[1,1], [2,2]]
myHashMap.put(2, 1); // The map is now [[1,1], [2,1]] (i.e., update the existing value)
myHashMap.get(2); // return 1, The map is now [[1,1], [2,1]]
myHashMap.remove(2); // remove the mapping for 2, The map is now [[1,1]]
myHashMap.get(2); // return -1 (i.e., not found), The map is now [[1,1]]
Constraints:
0 <= key, value <= 106
At most 104 calls will be made to put, get, and remove.
한글 해석
내장된 해시 테이블 라이브러리를 사용하지 않고 HashMap을 디자인합니다.
클래스 를 구현합니다 MyHashMap.
MyHashMap()빈 맵으로 객체를 초기화합니다.
void put(int key, int value)(key, value)HashMap에 쌍을 삽입합니다 . key맵에 이미 쌍이 있으면 해당 쌍을 업데이트합니다 value.
int get(int key)value지정된 .가 매핑되는 대상을 반환하거나 key, -1이 맵에 .에 대한 매핑이 없는 경우 반환합니다 key.
void remove(key)맵에 .에 대한 매핑이 포함되어 있으면 해당 매핑 key과 해당 항목을 제거합니다 .valuekey
예시 1:
입력
["MyHashMap", "넣다", "넣다", "가져오기", "넣다", "가져오기", "제거", "가져오기"]
[[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]]
산출
[null, null, null, 1, -1, null, 1, null, -1]
설명
내 해시맵 myHashMap = 새로운 내 해시맵();
myHashMap.put(1, 1); // 맵은 이제 [[1,1]]입니다.
myHashMap.put(2, 2); // 맵은 이제 [[1,1], [2,2]]입니다.
myHashMap.get(1); // return 1, 이제 맵은 [[1,1], [2,2]]입니다.
myHashMap.get(3); // -1을 반환합니다(즉, 찾을 수 없음). 이제 맵은 [[1,1], [2,2]]입니다.
myHashMap.put(2, 1); // 맵은 이제 [[1,1], [2,1]]입니다(즉, 기존 값을 업데이트합니다)
myHashMap.get(2); // return 1, 이제 맵은 [[1,1], [2,1]]입니다.
myHashMap.remove(2); // 2에 대한 매핑을 제거합니다. 이제 맵은 [[1,1]]입니다.
myHashMap.get(2); // -1을 반환합니다(즉, 찾을 수 없음). 이제 맵은 [[1,1]]입니다.
제약 조건:
0 <= key, value <= 106
최대 통화는 , , 및 로 이루어집니다 .104putgetremove
문제 유형
배열 Array
해시 테이블 Hash Table
연결 리스트 Linked List
디자인 패턴 Design
해시 함수 Hash Function
풀이 방법 도출
이 문제는 내장 해시맵 라이브러리를 사용하지 않고 MyHashMap 클래스를 구현해야 합니다.
put, get, remove 기능을 지원해야 한다.
- 키를 인덱스로 사용하고, 값을 배열의 해당 위치에 저장한다.
- 값을 제거할 때는 특수한 값 -1을 넣어 "없음"을 표현한다.
시간 복잡도
- O(1)
핵심 코드 삽입 및 설명
import java.util.*;
class MyHashMap {
// 배열을 선언
int[] map;
// 생성자: 배열 초기화 및 모든 값 -1로 설정
public MyHashMap() {
map = new int[1000001];
Arrays.fill(map, -1);
}
// 키에 해당하는 인덱스에 값을 저장
public void put(int key, int value) {
map[key] = value;
}
// 키에 해당하는 값 반환, 없으면 -1
public int get(int key) {
return map[key];
}
// 키 제거 (값을 -1로 설정해 제거 표시)
public void remove(int key) {
map[key] = -1;
}
}
'Study > 코딩 테스트' 카테고리의 다른 글
[백준] 11727번 2×n 타일링 2 해설 및 풀이 (Python, Java) (0) | 2025.04.11 |
---|---|
[99클럽 코테 스터디 TIL 12일차] 백준 2358번 평행선 해설 및 풀이 (Java) (0) | 2025.04.11 |
[백준] 1436번 영화감독 숌 해설 및 풀이 (Python) (0) | 2025.04.10 |
[LeetCode] LeetCode 1679. Max Number of K-Sum Pairs 해설 및 풀이 (Python) (0) | 2025.04.10 |
[99클럽 코테 스터디 10일차 TIL] LeetCode 2283. Check if Number Has Equal Digit Count and Digit Value 해설 및 풀이 (Java) (0) | 2025.04.09 |