프론트엔드✏️/코드캠프
알고리즘 - Set
당근먹는하니
2022. 5. 26. 18:03
728x90
반응형
Set - 중복 제거하기
배열을 대체해서 사용할 수 있다.
타입은 객체 형태를 가진다. (typeof 해보면 'object')( Array.isArray() 하면 false )
고유한 데이터만 저장할 수 있다. - 중복되는 데이터가 없다.
let array = [ 1, 3, 1, 2, 4]
Array.from(new Set(array)); // [1, 3, 2, 4]
arr1 = new Set();
arr2 = [];
// 데이터 추가
arr1.add(1)
arr2.push(1)
arr1.add(1) // 들어가지 않음(중복)
// 데이터 조회
arr1.has(1) // 1이 있나? true/false 반환
arr2.includes(1)
// 길이
arr1.size
arr2.length
// 데이터 삭제
arr1.delete()
arr2.pop()
// 초기화
arr1.clear()
// 반복문
arr1.forEach(el => {console.log(el)})
arr1.reduce // 불가능. 배열메서드 사용 불가
// set => 배열 변환 !중요!
// 1. Array.from
Array.from(arr1)
// 2. 스프레드 연산자
[...arr1]
[...arr1].reduce((acc, cur)=> { }) // 변환했으면 reduce도 사용가능
//짱 복잡하게 풀었다...
function solution(numbers) {
var arr = [];
let answer = [];
// answer = numbers.filter(number => false === answer.includes(number))
// console.log(numbers.filter(number => answer.includes(number)))
// return answer;
for(let i = 0; i < numbers.length; i++){
for(let j = 0; j < numbers.length; j++){
if(i !==j) {
arr.push(numbers[i]+numbers[j])
}
}
}
console.log(arr)
answer = Array.from(new Set(arr))
return answer.sort((a,b)=> a-b)
}
위에서 j = i + 1 하면 if(i !== j) 안줘도 된다.
// 멘토님 코드
function solution(numbers) {
const answer = new Set();
numbers.forEach( (num1, i) => {
numbers.slice(i+1).forEach(num2 => {
const sum = num1 + num2;
answer.add(sum);
}
})
return [...answer].sort((a,b)=> a-b);
}
728x90
반응형