Image Overlap

ㅋㅋ·2022년 10월 27일
0

알고리즘-leetcode

목록 보기
41/135

0과 1로 이루어진 벡터 두개를 받고 1번 벡터 데이터를 상하좌우로 이동했을 때,

2번 벡터와 가장 많이 중복되는 데이터를 구하는 문제이다.

다른 사람들은 빠른 속도를 내기위해서 비트 연산을 사용

class Solution {
public:
    int largestOverlap(vector<vector<int>>& img1, vector<vector<int>>& img2) {
        
        vector<pair<int, int>> points1{};
        vector<pair<int, int>> points2{};

        int rowNum = img1.size();
        int colNum = img1[0].size();
        for (int i = 0; i < rowNum; i++)
        {
            for (int j = 0; j < colNum; j++)
            {
                if (img1[i][j])
                {
                    points1.push_back({i, j});
                }

                if (img2[i][j])
                {
                    points2.push_back({i, j});
                }
            }
        }

        map<pair<int, int>, int> differenceMap{};

        int points1Size = points1.size();
        int points2Size = points2.size();

        int maxOverlap{0};
        for (int i = 0; i < points1Size; i++)
        {
            for (int j = 0; j < points2Size; j++)
            {
                int differenceX{points1[i].first - points2[j].first};
                int differenceY{points1[i].second - points2[j].second};
                
                pair<int, int> point = {differenceX, differenceY};
                differenceMap[point]++;

                maxOverlap = std::max(maxOverlap, differenceMap[point]);
            }
        }

        return maxOverlap;
    }
};

0개의 댓글