30-Day LeetCoding Challenge - 7Day (Counting Elements)

w-beom·2020년 4월 8일
0

Counting Elements

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:

  • 1 <= arr.length <= 1000
  • 0 <= arr[i] <= 1000

Solution

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()
  1. arr[] 배열로 값이 [1,1,2,2]가 들어온다고 가정하자
  2. eleMap.put(num, eleMap.getOrDefault(num, 0) + 1); 구문이 실행 된 후 HashMap은 {1=2,2=2} 이런식으로 저장되어 있을 것이다.
  3. Iterator를 이용해 eleMap의 key값을 모두 가져온다.
  4. eleMap안에 key값으로 key+1이 존재하면 count에 해당 key의 value를 더한다.
    • key=x라 할 때 key+1=x+1이기 때문에 key+1이 존재하는지 찾는 것!
  5. (4)번 과정을 마지막 key값까지 반복한 후 count를 반환한다!

마침

하루하루 챌린지를 하면서 확실히 뭔가를 배워가는 느낌이 들기 시작했다. ㅎㅎㅎ
원래 공부라는 게 자신이 성장했다는 것을 깨닫기 힘들어서 꾸준히 하기가 힘든데
벌써부터 뭔가를 알아간다는 걸 느끼는 게 다행이라 생각한다. 더 꾸준히 해야겠다!

profile
습득한 지식과 경험을 나누며 다른 사람들과 문제를 함께 해결해 나가는 과정에서 서로가 성장할 수 있는 기회를 만들고자 노력합니다.

0개의 댓글