IF - 공통원소 구하기

Goody·2021년 4월 12일
0

알고리즘

목록 보기
84/122
post-custom-banner

문제

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


예시

arr1arr2Output
[1,3,9,5,2][3,2,5,7,8][2,3,5]

풀이 및 회고

  • 주어진 두 배열을 오름차순으로 정렬한다.
  • 각 배열 별로 원소를 가리키는 포인터를 둔다.
  • 두 포인터가 값이 다르면, 더 작은 값을 가리키는 포인터의 위치를 한 칸 오른쪽으로 옮긴다.
  • 두 포인터의 값이 같으면, 새로운 배열에 해당 값을 삽입하고, 두 포인터의 위치를 한 칸 오른쪽으로 옮긴다.
  • 두 포인터 중 하나라도 주어진 배열의 범위를 벗어나면 값의 비교가 이뤄질 수 없으므로, 루프를 중단시킨다.
  • 앞에서 풀었던 배열 합치기 문제와 비슷해서 풀기 수월했던 것 같다. 배열을 포인터로 탐색하는 새로운 접근법을 배운 것 같다.

코드

const solution = (arr1, arr2) => {
    const result = [];
    
    arr1.sort((a,b) => a-b);
    arr2.sort((a,b) => a-b);
    let lIndex = 0;
    let rIndex = 0;
 
    while(true) {

        const lPointer = arr1[lIndex];
        const rPointer = arr2[rIndex];

        if(!lPointer || !rPointer) break;

        if(lPointer > rPointer) {
            rIndex++;
        }

        if(rPointer > lPointer) {
            lIndex++;
        }

        if(rPointer === lPointer) {
            result.push(rPointer);
            lIndex++;
            rIndex++;
        }

    }
    return result;
    
}
post-custom-banner

0개의 댓글