Given an integer array arr, count element x such that x + 1 is also in arr.
If there're duplicates in arr, count them seperately.
Example 1: Input: arr = [1,2,3] Output: 2 Explanation: 1 and 2 are counted cause 2 and 3 are in arr.
Example 2: Input: arr = [1,1,3,3,5,5,7,7] Output: 0 Explanation: No numbers are counted, cause there's no 2, 4, 6, or 8 in arr.
Example 3: Input: arr = [1,3,2,3,5,0] Output: 3 Explanation: 0, 1 and 2 are counted cause 1, 2 and 3 are in arr.
Example 4: Input: arr = [1,1,2,2] Output: 2 Explanation: Two 1s are counted cause 2 is in arr.
Constraints:
class Solution {
public int countElements(int[] arr) {
HashMap<Integer, Integer> eleMap = new HashMap<>();
int count = 0;
for (int num : arr) {
eleMap.put(num, eleMap.getOrDefault(num, 0) + 1);
}
Iterator<Integer> keys = eleMap.keySet().iterator();
while (keys.hasNext()) {
int key = keys.next();
if (eleMap.containsKey(key + 1)) {
count+=eleMap.get(key);
}
}
return count;
}
}
해당 배열의 i번째 x값이 있으면 x와 x+1이 짝을 이루어 몇 개 있는지 반환하는 메소드를
작성하는 것이다.
해당 Solution에서 최근에 알게된 HashMap 객체에 있는 getOrDefault()를 사용하였다. getOrDefault()를 이용해 배열에서 중복되는 값의 갯수를 쉽게 찾아낼 수 있다!
getOrDefault(Object key, Integer defaultValue): 찾는 키가 존재하면 해당 키의 값을 반환, 존재하지 않으면 기본값을 반환한다.
getOrDefault()
arr[] 배열로 값이 [1,1,2,2]가 들어온다고 가정하자
eleMap.put(num, eleMap.getOrDefault(num, 0) + 1); 구문이 실행 된 후 HashMap은 {1=2,2=2} 이런식으로 저장되어 있을 것이다.
Iterator를 이용해 eleMap의 key값을 모두 가져온다.
eleMap안에 key값으로 key+1이 존재하면 count에 해당 key의 value를 더한다.
(4)번 과정을 마지막 key값까지 반복한 후 count를 반환한다!
하루하루 챌린지를 하면서 확실히 뭔가를 배워가는 느낌이 들기 시작했다. ㅎㅎㅎ
원래 공부라는 게 자신이 성장했다는 것을 깨닫기 힘들어서 꾸준히 하기가 힘든데
벌써부터 뭔가를 알아간다는 걸 느끼는 게 다행이라 생각한다. 더 꾸준히 해야겠다!