Coding Test 준비 #1

찌끅·2023년 8월 23일

Array 중복 제거

set() 함수 이용

set() 함수는 중복을 허용하지 않는다.

const nums = [1, 2, 3, 6, 6, 4, 5, 5, 3, 7, 9];

const mySet = new Set();
const uniqueNums = [...new Set(nums)]; /// spread연산자로 array 변환

console.log(uniqueNums); // {1, 2}


mySet.add(1);
mySet.add(2);
mySet.add(2); // 중복을 허용하지 않기 때문에 {1,2}만 나온다.

console.log(mySet); // [1, 2, 3, 6, 4, 5, 7, 9]

new Set()을 사용하여 빈 Set객체 mySet을 생성한다. Set은 중복을 혀용하지 않는 데이터 집합이다.

mySet.add()는 순서대로 1, 2, 2를 추가한다. Set은 중복된 값을 혀용하지 않으므로 마지막 add(2)는 무시한다.
따라서 {1, 2}만 출력된다.

indexof() 함수 이용

indexof()는 array element를 전달을 해주면 그에 상응하는 element의 첫 번째 index를 보여준다.

const nums = [1, 2, 3, 6, 6, 4, 5, 5, 3, 7, 9];

const uniqueNums = nums.filter((item, position) => {
  return nums.indexOf(item) === position;
});

console.log(uniqueNums); // [1, 2, 3, 6, 4, 5, 7, 9]

nums배열에 filter() 함수를 사용하여 주어진 조건 함수에 따라 배열을 필터링하게 만든다.
조건 함수는 각 배열 요소와 해당 요소의 인덱스('position')를 매개 변수로 받는다.

nums.indexOf(item)는 배열 nums에서 item의 첫 번째 등장 위치의 인덱스를 반환
position은 현재 배열 요소의 인덱스
조건 함수는 배열의 각 요소에 대해, 해당 요소가 처음 등장하는 위치의 인덱스가 현재 인덱스('position')와 일치하는 지 확인한다.
예를 들면,
1 0
2 1
3 2
6 3
6 4 indexof로 첫 번째 요소의 인덱스는 3 이기 때문에 false
4 5
5 6
5 7 indexof로 첫 번째 요소의 인덱스는 6 이기 때문에 false
3 8 indexof로 첫 번째 요소의 인덱스는 2 이기 때문에 false
7 9
9 10
이런 식으로 이루어지는 거 같다.

caching, frequency map을 이용

추가적인 자료구조를 사용하는 방법이다.
loop를 통해 미리 지정된 caching object에 존재 여부를 확인한다.

const nums = [1, 2, 3, 6, 6, 4, 5, 5, 3, 7, 9];

function uniqueNums(arr) {
  const uniqueElements = {};
  const result = [];
  for (let element of arr) {
    if (!uniqueElements[element]) {
      result.push(element);
    }
    uniqueElements[element] = element;
  }
  return result;
}

console.log(uniqueNums(nums)); // [1, 2, 3, 6, 4, 5, 7, 9]

uniqueElements라는 객체는 각 요소의 고유한 값들을 기록하기 위해 사용된다.
result라는 배열은 중복이 제거된 값을 저장할 목적으로 사용된다.
!uniqueElements[element]는 uniqueElements 객체 내에 현재 요소의 값이 없는지 확인한다. 즉, 해당하는 값이 없다면 result.push(element)에서 배열에 추가한다.
uniqueElements[element] = element는 uniqueElements 객체에 현재 요소의 값을 등록한다.이를 통해 이후에 같은 요소가 다시 나올 경우 중복으로 처리한다.

0개의 댓글