Thanks to visit codestin.com
Credit goes to dani1552.tistory.com

📚 CS/Algorithm

[Algorithm] Set, Map 함수 알아보기

dev.daisy 2025. 9. 26. 14:22
기본적인 메서드이지만 코딩테스트를 공부하다보면 각각의 함수명이 제대로 생각나지 않아 꼭 구글링해보기 마련인데, 이 기회에 제대로 정리해보게 되어 좋았습니다. 앞으로 Set, Map 함수를 더 효율적으로 사용해 시간복잡도의 장점을 살려서 문제를 풀어보려고 합니다.

자바스크립트로 코딩테스트를 풀다 보면 꼭 마주하는 개념인데, 알고리즘에 집중하다 헷갈리는 경우가 많아 글로 정리해보려고 합니다.

1. Set: 중복 없는 값들의 집합

자바스크립트의 Set중복을 허용하지 않는 유일한 값들의 집합입니다. 배열과 비슷하지만 중복을 자동으로 제거해 준다는 점에서 차이가 있습니다. Set은 주로 고유한 값들을 저장하거나 배열에서 중복을 제거할 때 유용하게 사용됩니다.

Set의 주요 메서드

  • new Set(): 비어 있는 Set을 생성합니다.
  • new Set(iterable): 배열이나 문자열 같은 이터러블 객체로 Set을 생성합니다.
  • set.add(value): Set에 값을 추가하고, Set 자신을 반환합니다.
  • set.delete(value): 값을 제거합니다. 성공하면 true, 실패하면 false를 반환합니다.
  • set.has(value): Set에 값이 존재하는지 확인하고, true 또는 false를 반환합니다.
  • set.size: Set에 있는 요소의 개수를 반환합니다.
// Set 사용 예시
const arr = [1, 2, 2, 3, 4, 4, 4, 5];
const uniqueArr = [...new Set(arr)]; // Set을 이용해 중복 제거 후 배열로 변환
console.log(uniqueArr); // [1, 2, 3, 4, 5]

const mySet = new Set();
mySet.add('apple');
mySet.add('banana');
mySet.add('apple'); // 중복된 값은 추가되지 않음

console.log(mySet.size); // 2
console.log(mySet.has('banana')); // true

2. Map: 키-값 쌍의 컬렉션

Map키-값 쌍으로 이루어진 데이터를 저장하는 객체입니다. 일반적인 객체(Object)와 유사하지만 Map은 객체의 키로 모든 자료형을 사용할 수 있고, 요소의 순서를 보장하며, 요소의 개수를 쉽게 파악할 수 있다는 장점이 있습니다.

Map의 주요 메서드

  • new Map(): 비어 있는 Map을 생성합니다.
  • map.set(key, value): Map에 키-값 쌍을 추가하고, Map 자신을 반환합니다.
  • map.get(key): 주어진 키에 해당하는 값을 반환합니다. 키가 없으면 undefined를 반환합니다.
  • map.delete(key): 키에 해당하는 쌍을 제거합니다. 성공하면 true, 실패하면 false를 반환합니다.
  • map.has(key): 키가 존재하는지 확인하고, true 또는 false를 반환합니다.
  • map.size: Map에 있는 요소의 개수를 반환합니다.
// Map 사용 예시
const myMap = new Map();
myMap.set('name', 'Gildong');
myMap.set(123, 'number');
myMap.set(true, 'boolean');

console.log(myMap.get('name')); // Gildong
console.log(myMap.get(123)); // number
console.log(myMap.size); // 3

myMap.delete('name');
console.log(myMap.has('name')); // false

💻 코딩테스트 실사용 예시

문제 1: 중복 없는 숫자 개수 세기 (Set 활용)

function countUniqueNumbers(nums) {
    // Set을 이용하면 중복이 자동으로 제거되므로, Set의 size가 곧 고유한 값의 개수입니다.
    const uniqueSet = new Set(nums);
    return uniqueSet.size;
}

const numbers = [1, 2, 2, 3, 4, 5, 5, 5, 6];
console.log(countUniqueNumbers(numbers)); // 6

 

문제 2: 가장 많이 등장하는 문자 찾기 (Map 활용)

function findMostFrequentChar(s) {
    const charCount = new Map();

    // 1. 각 문자의 빈도수를 Map에 저장합니다.
    for (const char of s) {
        charCount.set(char, (charCount.get(char) || 0) + 1);
    }

    let maxCount = 0;
    let mostFrequentChar = '';

    // 2. Map을 순회하며 가장 높은 빈도수를 찾습니다.
    for (const [char, count] of charCount.entries()) {
        if (count > maxCount) {
            maxCount = count;
            mostFrequentChar = char;
        }
    }

    return { char: mostFrequentChar, count: maxCount };
}

const str = "hello world";
const result = findMostFrequentChar(str);
console.log(`가장 많이 등장하는 문자: '${result.char}', 횟수: ${result.count}`); // 'l', 3

 

 

두 자료구조는 내부적으로 해시 테이블과 유사하게 작동하여, 데이터의 탐색 및 삽입 시