본문 바로가기

알고리즘연구소👨‍💻/리트코드

1213. Intersection of Three Sorted Arrays

문제 상황

Given three integer arrays arr1, arr2 and arr3 sorted in strictly increasing order, return a sorted array of only the integers that appeared in all three arrays.

3개의 배열이 주어지고 배열은 정렬돼있다 이 배열에서 공통적으로 드러나는 모든 요소들을 정렬된 방향으로 리턴해라

입력

  • 1 <= arr1.length, arr2.length, arr3.length <= 1000
  • 1 <= arr1[i], arr2[i], arr3[i] <= 2000

출력

3개의 배열에 공통적으로 드러나는 모든 요소들을 정렬해놓은 배열

과정

  1. 일단 모든 요소들이 공통으로 등장한다는 점을 인덱스로 치환한다.
  2. 배열이 정렬돼있기 때문에 인덱스 a, b, c의 값들이 일치하면 이들은 같은값이고 인덱스를 한번에 올린다
  3. 아닐경우에는 가장 작은 값을 찾아서 그값 인덱스만 올린다. 이러면 쉽게 문제를 풀 수 있다

알고리즘

class Solution {
public:
    vector<int> arraysIntersection(vector<int>& arr1, vector<int>& arr2, vector<int>& arr3) {
        int p1 = 0, p2 = 0, p3 = 0;
        vector<int> answer {};
        while(p1 < arr1.size() && p2 < arr2.size() && p3 < arr3.size())
        {
            if (arr1[p1] == arr2[p2] && arr2[p2] == arr3[p3])
            {
                answer.push_back(arr1[p1]);
                p1++; p2++; p3++;
            }
            else
            {
                int tmp = arr1[p1];
                if (arr2[p2] < tmp)
                {
                    tmp = arr2[p2];
                }
                if (arr3[p3] < tmp)
                {
                    tmp = arr3[p3];
                }

                if (tmp == arr1[p1])
                {
                    p1++;
                    continue;
                }
                if (tmp == arr2[p2])
                {
                    p2++;
                    continue;
                }
                if (tmp == arr3[p3])
                {
                    p3++;
                    continue;
                }
            }
        }
        return answer;
    }
};

1213. Intersection of Three Sorted Arrays