공통원소 구하기

bkboy·2022년 5월 18일
0

문제

A, B 두 개의 집합이 주어지면 두 집합의 공통 원소를 추출하여 오름차순으로 출력하는 프로
그램을 작성하세요.

제한사항

입출력 예

풀이

function solution(arr1, arr2) {
  let answer = [];
  let p1 = (p2 = 0);
  arr1.sort((a, b) => a - b);
  arr2.sort((a, b) => a - b);
  while (p1 < arr1.length && p2 < arr2.length) {
    if (arr1[p1] === arr2[p2]) {
      answer.push(arr1[p1++]);
      p2++;
    } else if (arr1[p1] < arr2[p2]) {
      p1++;
    } else {
      p2++;
    }
  }
  return answer;
}

let a = [1, 3, 9, 5, 2];
let b = [3, 2, 5, 7, 8];
console.log(solution(a, b));

const solution2 = (arr1, arr2) => {
  let set = new Set();
  for (let i = 0; i < arr1.length; i++) {
    for (let j = 0; j < arr2.length; j++) {
      if (arr1[i] === arr2[j]) {
        set.add(arr1[i]);
      }
    }
  }
  let answer = Array.from(set).sort((a, b) => a - b);
  return answer;
};

console.log(solution2(a, b));
  • 투포인터 알고리즘
  • 두 개의 무언가가 나오면 투포인터 알고리즘도 고려해보자
  • 우선 오름차순으로 정렬을 해주고 배열에 값이 같으면 새로운 배열에 넣어주고 포인터를 증가시키고 다르면 둘 중 작은 값 쪽 포인터를 증가시켜준다.
  • 단순히 이중포문을 이용할 수도 있다.
profile
음악하는 개발자

0개의 댓글