Algorithm - Hash CodingTest Tip
- Java로 코딩테스트를 준비하며 부족한 부분을 공부하기 위해 정리하였음.
- 코딩테스트 Hash와 관련된 정리내용임.
1. HashMap 에서 사용하는 기본적인 메서드들
-
.put(key, value) : 키와 값을 추가한다. 같은 key가 있으면 덮어 씌워버린다.
-
.remove(key) : 해당 key, value를 완전히 삭제한다.
-
.get(key) : 해당 key의 값을 불러온다.
-
.size() : map의 길이를 구한다.
-
.containsKey(key) / .containsValue(val) : 해당 key나 Value에 해당 값이 있는지를 확인한다.
-
.keySet, Values :
-
for문에 넣음으로써 key나 value를 통한 for문을 돌릴 수 있다.
-
그냥 프린트하면 연속되어 출력된다. ex) [ a, b, c, d, e ]
-
-
.getOrDefault(key, defaultValue) : key를 넣어보고, 해당 key가 없다면 defaultValue를 반환한다. key가 있으면 그 key의 value를 반환한다.
-
.clear() : 모두 지운다.
-
.isEmpty() : element가 있는지 없는지 boolean으로 반환해준다.
-
.forEach : 모든 키, 밸류를 순회한다.
- ex)
map.forEach((key, val) -> { System.out.println(key); System.out.println(val); });
2. Map 도 equals 로 비교가 가능하다.
-
Map에서 equals도 동등의 역할을 할 수 있도록 오버라이드 되어있음. 그래서 equals로 맵의 값 비교가 가능하다.
-
key값과 value값이 모두 동일하다면 equals 사용시 String 처럼 true가 나온다.
3. TreeSet 을 활용하자.
-
중복되지 않는 값을 넣는 자료구조에는 HashSet도 있지만, reverseOrder()처럼 자동으로 정렬해주는걸 사용하고 싶으면, TreeSet 이 좋다.
-
TreeSet은 자동 정렬을 해주기 때문.
-
TreeSet
tSet = new TreeSet<>(); 이렇게 하면 오름차순 자동 정렬이고, -
TreeSet
tSet = new TreeSet<>(Collections.reverseOrder()); 이렇게 하면 내림차순 자동 정렬이 된다.
4. HashMap 과 Sliding Window 알고리즘을 합친 풀이 방법을 잘 공부하고 복습하고 숙지할 것.
- 생각보다 많이 나오는 문제 유형 방식이다.
public static List<Integer> solution(int n, int k, int[] arr) {
ArrayList<Integer> answerList = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
for (int i=0; i<k-1; i++) {
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
}
int lt = 0;
for ( int rt = k-1; rt < n; rt ++ ) {
map.put(arr[rt], map.getOrDefault(arr[rt], 0) + 1);
answerList.add(map.size());
map.put(arr[lt], map.get(arr[lt]) - 1);
if ( map.get(arr[lt]) == 0 ) map.remove(arr[lt]);
lt ++;
}
return answerList;
}
5. 중복 확인에는 Map의 getOrDefault 메서드를 활용하는 것이 좋다.