Set
- 중복되지 않은 값(value) 들을 저장하는 컬렉션
- 요소는 고유해야 하며, 중복된 값은 저장되지 않습니다.
- 값을 빠르게 추가, 삭제, 탐색
Map
- 키(key)와 값(value) 쌍으로 이루어진 데이터 구조
- 각 키는 고유해야 하지만, 값은 중복될 수 있습니다.
- 키를 기준으로 값을 빠르게 검색, 추가, 삭제
Set과 Map 비교
특징 | Set | Map |
저장 방식 | 중복되지 않은 값만 저장 | 키-값 쌍으로 저장 |
중복 허용 여부 | 중복된 값 저장 불가 | 키는 중복될 수 없으나 값은 중복 가능 |
값 접근 방법 | 인덱스가 없고, 값을 직접 확인 | 키를 통해 값을 검색 |
순서 보장 여부 | 삽입된 순서 유지 | 삽입된 순서 유지 |
메소드 | add(), has(), delete() | set(), get(), has(), delete() |
Set 예제
1. 중복 제거
배열에서 중복된 값을 제거합니다.
function removeDuplicates(arr) {
return [...new Set(arr)];
}
const arr = [1, 2, 3, 3, 4, 4, 5];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 4, 5]
2. 교집합 찾기
두 배열의 교집합을 구합니다.
function findIntersection(arr1, arr2) {
const set1 = new Set(arr1);
return arr2.filter(item => set1.has(item));
}
const set1 = new Set([1, 2, 3, 4]);
const set2 = new Set([3, 4, 5, 6]);
const intersection = [...set1].filter(item => set2.has(item));
console.log(intersection); // [3, 4]
3. 차집합 구하기
한 배열에서 다른 배열에 없는 값을 구합니다.
function difference(arr1, arr2) {
const set2 = new Set(arr2);
return arr1.filter(item => !set2.has(item));
}
4. 중복된 값 찾기
배열에서 중복된 값을 찾아 반환합니다.
function findDuplicates(arr) {
const set = new Set();
const duplicates = new Set();
for (const item of arr) {
if (set.has(item)) {
duplicates.add(item);
} else {
set.add(item);
}
}
return [...duplicates];
}
5. 유일한 값 확인
배열이 모두 유일한 값으로만 이루어졌는지 확인합니다.
function allUnique(arr) {
return new Set(arr).size === arr.length;
}
const arr = [1, 2, 3, 4, 5];
const hasUniqueValues = new Set(arr).size === arr.length;
console.log(hasUniqueValues); // true
6. 배열에서 특정 값 제거
특정 값을 배열에서 제거합니다.
function removeSpecificValue(arr, value) {
const set = new Set(arr);
set.delete(value);
return [...set];
}
7. 합집합 구하기
두 배열의 합집합을 구합니다.
function union(arr1, arr2) {
return [...new Set([...arr1, ...arr2])];
}
8. 배열 내의 중복된 요소 개수 세기
배열에서 중복된 요소의 개수를 셉니다.
function countDuplicates(arr) {
const set = new Set();
let duplicates = 0;
for (const item of arr) {
if (set.has(item)) {
duplicates++;
} else {
set.add(item);
}
}
return duplicates;
}
Map 예제
1. 문자 빈도 카운팅
주어진 문자열에서 각 문자의 빈도를 카운팅합니다.
function countCharFrequency(str) {
const map = new Map();
for (const char of str) {
map.set(char, (map.get(char) || 0) + 1);
}
return map;
}
const result = countCharFrequency("hello");
console.log(result); // Map { 'h' => 1, 'e' => 1, 'l' => 2, 'o' => 1 }
2. 두 배열의 매핑
두 배열을 매핑하여 각 값이 짝을 이루는지 확인합니다.
function isMappedCorrectly(arr1, arr2) {
if (arr1.length !== arr2.length) return false;
const map = new Map();
for (let i = 0; i < arr1.length; i++) {
if (map.has(arr1[i])) {
if (map.get(arr1[i]) !== arr2[i]) return false;
} else {
map.set(arr1[i], arr2[i]);
}
}
return true;
}
const arr1 = ['a', 'b', 'c'];
const arr2 = [1, 2, 3];
console.log(isMappedCorrectly(arr1, arr2)); // true
3. 값의 중복 제거 후 마지막 값 찾기
중복된 키를 가진 값 중 마지막 값을 저장하고 찾습니다.
function getLastValue(arr) {
const map = new Map();
arr.forEach(([key, value]) => {
map.set(key, value);
});
return [...map.values()].pop();
}
const arr = [['a', 1], ['b', 2], ['a', 3]];
console.log(getLastValue(arr)); // 3
4. 단어 길이로 그룹핑
단어들의 길이에 따라 그룹으로 나눕니다.
function groupByWordLength(words) {
const map = new Map();
words.forEach(word => {
const len = word.length;
if (!map.has(len)) {
map.set(len, []);
}
map.get(len).push(word);
});
return map;
}
const words = ['apple', 'banana', 'pear', 'peach', 'plum'];
console.log(groupByWordLength(words));
// Map { 5 => ['apple', 'peach'], 6 => ['banana'], 4 => ['pear', 'plum'] }
5. 연속된 요소의 개수 세기
배열에서 연속된 요소의 개수를 카운트합니다.
function countConsecutive(arr) {
const map = new Map();
let count = 1;
for (let i = 1; i < arr.length; i++) {
if (arr[i] === arr[i - 1]) {
count++;
} else {
map.set(arr[i - 1], count);
count = 1;
}
}
map.set(arr[arr.length - 1], count);
return map;
}
const arr = [1, 1, 2, 2, 2, 3];
console.log(countConsecutive(arr)); // Map { 1 => 2, 2 => 3, 3 => 1 }
6. 이름으로 나이 찾기
사람의 이름과 나이를 매핑하여 이름으로 나이를 찾습니다.
function findAge(name, people) {
const map = new Map(people); // [['Alice', 25], ['Bob', 30]]
return map.get(name) || 'Not found';
}
const people = [['Alice', 25], ['Bob', 30]];
console.log(findAge('Alice', people)); // 25
console.log(findAge('Charlie', people)); // Not found
7. 평균 점수 계산
학생들의 이름과 점수를 매핑하고 평균을 구합니다.
function averageScore(students) {
const map = new Map(students); // [['Alice', 90], ['Bob', 85]]
const total = [...map.values()].reduce((a, b) => a + b, 0);
return total / map.size;
}
const students = [['Alice', 90], ['Bob', 85], ['Charlie', 80]];
console.log(averageScore(students)); // 85
반응형
'개발 > Javascript' 카테고리의 다른 글
[js] 수학 공식을 활용한 코딩테스트 예제 (1) | 2024.09.21 |
---|---|
[js] reduce 함수 사용법 (0) | 2024.09.05 |
[코딩테스트] 최빈값, 빈도수 구하기주사위 (0) | 2024.09.05 |
[코딩테스트] 주사위 게임 문제 풀이 (빈도 계산) (0) | 2024.08.29 |
배열, 문자열의 접두사, 접미사 비교 (0) | 2024.08.28 |
댓글