Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

705. Design HashSet (HashSet 디자인) 본문

코딩 테스트/LeetCode

705. Design HashSet (HashSet 디자인)

포카리tea 2024. 10. 31. 14:58

내장된 해시 테이블 라이브러리를 사용하지 않고 해시셋을 설계합니다.

MyHashSet 클래스 구현:

  • void add(키) 값 key를 해시셋에 삽입합니다.
  • bool contain(key) 해시셋에 값 key가 있는지 여부를 반환합니다.
  • void remove(key) 해시셋에서 값 key를 제거합니다. 해시셋에 key가 없는 경우 아무것도 수행하지 않습니다.

 

예시 1:

입력
["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
출력
[null, null, null, true, false, null, true, null, false]

설명
MyHashSet myHashSet = new MyHashSet();
myHashSet.add(1);      // set = [1]
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(1); // return True
myHashSet.contains(3); // return False, (찾을 수 없음)
myHashSet.add(2);      // set = [1, 2]
myHashSet.contains(2); // return True
myHashSet.remove(2);   // set = [1]
myHashSet.contains(2); // return False, (이미 제거됨)

 

 

조건:

  • 0 <= key <= 10^6
  • add, remove 및 contains를 위해 최대 10^4건의 통화가 이루어집니다.

 

정답:

public class MyHashSet {
    bool[] arr; 
    public MyHashSet() {
        arr =  new bool[1000001]; 
    }
    
    public void Add(int key) {
        arr[key] = true; 
    }
    
    public void Remove(int key) {
        arr[key] = false; 
        
    }
    
    public bool Contains(int key) {
        return arr[key];
    }
}

/**
 * Your MyHashSet object will be instantiated and called as such:
 * MyHashSet obj = new MyHashSet();
 * obj.Add(key);
 * obj.Remove(key);
 * bool param_3 = obj.Contains(key);
 */

해설: bool 배열을 제작 후 key값의 배열에 add하면 true를 remove하면 false로 변경합니다.

배열을 Contains로 불러온다면 해당 key배열의 값을 그대로 return해줍니다.