📦

Count Occurrences

Count Occurrences - Explanation

쉬움 객체 O(n) O(k)

Problem Summary

Write a function that counts the occurrences of each element in an array.

Go to Problem →

Detailed Explanation

이 문제는 **객체를 해시맵처럼 사용**하여 빈도수를 세는 패턴을 학습합니다. 데이터 분석과 알고리즘 문제에서 자주 사용됩니다. **핵심 패턴: 객체로 카운팅** 객체의 키로 요소를, 값으로 출현 횟수를 저장합니다. **reduce로 구현하기** ```javascript arr.reduce((acc, item) => { acc[item] = (acc[item] || 0) + 1; return acc; }, {}); ``` **핵심 표현: (acc[item] || 0) + 1** - acc[item]이 존재하면: 기존 값 + 1 - acc[item]이 없으면(undefined): 0 + 1 = 1 **["a", "b", "a", "c", "a", "b"] 처리 과정** - "a": {a: 1} - "b": {a: 1, b: 1} - "a": {a: 2, b: 1} - "c": {a: 2, b: 1, c: 1} - "a": {a: 3, b: 1, c: 1} - "b": {a: 3, b: 2, c: 1} **for문 버전** ```javascript const count = {}; for (const item of arr) { count[item] = (count[item] || 0) + 1; } return count; ``` **실용적인 활용** - 문자 빈도수 분석 - 최빈값 찾기 - 데이터 중복 확인

Solution Code

solution.js
function countOccurrences(arr) {
  return arr.reduce((acc, item) => {
    acc[item] = (acc[item] || 0) + 1;
    return acc;
  }, {});
}

Key Concepts from This Problem

1. 객체를 해시맵으로 사용
2. reduce로 객체 생성
3. 빈도수 카운팅 패턴
4. || 연산자 활용

Common Mistakes

reduce의 초기값 {}를 빠뜨리면 첫 요소가 초기값이 됩니다
acc를 return하지 않으면 다음 반복에서 undefined가 됩니다
숫자 키도 객체에서는 문자열로 변환됩니다

Hints

Hint 1: 빈 객체로 시작하세요.
Hint 2: 각 요소를 키로, 횟수를 값으로 저장합니다.
Hint 3: reduce 또는 for문을 사용하세요.

Complexity Analysis

Time Complexity

O(n)

Grows linearly with input size

Space Complexity

O(k)

Related Tags

#객체 #reduce #빈도수