Codility Lesson 15 - AbsDistinct

문제 설명

N개의 숫자로 구성된 비어 있지 않은 배열 A가 주어집니다. 배열은 내림차순이 아닌 순서로 정렬됩니다. 이 배열의 절대 고유 개수는 배열의 요소 중 고유한 절대 값의 수입니다.

예를 들어 배열 A가 다음과 같다고 가정해 보겠습니다:

  A[0] = -5
  A[1] = -3
  A[2] = -1
  A[3] = 0
  A[4] = 3
  A[5] = 6

이 배열의 요소에는 0, 1, 3, 5, 6의 5개의 고유 절대값이 있으므로 이 배열의 절대 고유 개수는 5입니다.

함수를 작성합니다:

function solution(A);

N개의 숫자로 구성된 비어 있지 않은 배열 A가 주어졌을 때, 배열 A의 절대 고유 개수를 반환하는 함수입니다.

예를 들어, 배열 A가 주어졌을 때

  A[0] = -5
  A[1] = -3
  A[2] = -1
  A[3] = 0
  A[4] = 3
  A[5] = 6

인 경우 함수는 위에서 설명한 대로 5를 반환해야 합니다.

다음 가정에 대한 효율적인 알고리즘을 작성합니다:

  • N은 [1..100,000] 범위 내의 정수입니다;
  • 배열 A의 각 요소는 [-2,147,483,648..2,147,483,647] 범위 내의 정수입니다;
  • 배열 A는 감소하지 않는 순서로 정렬됩니다.

문제 접근

배열의 요소를 절대값으로 변경후 Set 을 이용하여 중복된 요소를 제거한다.

function solution(A) {
    const arr = A.map((value) => {
        return Math.abs(value);
    });

    const set = new Set(arr);

    return set.size;
}