알고리즘 - freeCodeCamp - Sorted Union

NO PAIN, NO GAIN·2019년 11월 26일
0

algorithm

목록 보기
6/18

문제

중복없이 유일한 값들만 있는 배열을 반환하라.

예시

uniteUnique([1, 3, 2], [5, 2, 1, 4], [2, 1]) ---> [1, 3, 2, 5, 4]
uniteUnique([1, 2, 3], [5, 2, 1]) ---> [1, 2, 3, 5]
uniteUnique([1, 2, 3], [5, 2, 1, 4], [2, 1], [6, 7, 8]) ---> [1, 2, 3, 5, 4, 6, 7, 8]

해결방법

function uniteUnique(arr, ...otherArr) {
  let result = [...arr];

  for (let i = 0; i < otherArr.length; i++) {
    for (let j = 0; j < otherArr[i].length; j++) {
      if (!result.includes(otherArr[i][j])) {
        result.push(otherArr[i][j]);
      }
    }
  }

  return result;
}

변수 result를 선언한다. 2중 for문을 이용해서 otherArr에 있는 배열들을 각각 탐색하고, 각각의 값들을 탐색한다. 탐색할 때 includes 메소드를 이용해서 result와 비교하고 값이 없으면 result에 값을 푸시한다.

다른 해결방법

function uniteUnique(arr, ...otherArr) {
  let result = [...arr];
  let [first, ...rest] = otherArr;
  let sumArr = first;

  for (let i = 0; i < rest.length; i++) {
    sumArr = [...sumArr, ...rest[i]];
  }

  for (let i = 0; i < sumArr.length; i++) {
    if (!result.includes(sumArr[i])){
      result.push(sumArr[i]);
    }
  }

  return result;
}

이 방법은 2중 for문을 사용하지 않고 할 수 있는 해결할 수 있는 방법을 생각하면서 해결한 방법이다. otherArr에는 하나 이상의 배열이 있다. otherArr 에 있는 배열들을 하나로 합치는걸 생각했다. 변수 sumArr를 선언하고 sumArr를 하나의 배열로 만들기 위해 for문을 이용했다. for문을 한번 더 사용해서 첫 번째와 같은 형식으로 중복되는 숫자를 제외하고 result에 중복되지 않는 숫자만 푸시했다.

profile
갈고 닦자.

0개의 댓글