Study/Algorithm

LeetCode (C/C++) 2352. Equal Row and Column Pairs

hwooo 2024. 10. 15. 22:56

https://leetcode.com/problems/equal-row-and-column-pairs/description/


풀이

딱히 다른 풀이가 떠오르지 않아 모든 원소를 일일이 비교하는 방식으로 풀었다

 

답지 풀이

한 행을 key 값으로 하는 map을 사용,  해당 map에 하나의 열을 key로 가진 원소가 있는지 확인.있다면 그 행과 열은 동일한 값이므로 해당 행의 개수를 답에 추가

 

 

답지 풀이 방식이 더 빨랐다. map의 key로 값을 비교할 생각을 해보지 못 함..


코드 1

class Solution {
public:
    int equalPairs(vector<vector<int>>& grid) {
        int size = grid.size();
        int cnt = 0;

        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                int idx = 0;

                // i번째 행과 j번째 열의 값을 모두 비교
                while (idx < size && grid[i][idx] == grid[idx][j])
                    idx++;
                    
                // 만약 모든 값이 같다면 cnt++
                if (idx == size)
                    cnt++;
            }
        }
        return cnt;
    }
};

 

 

코드 2 (답지)

class Solution {
public:
    int equalPairs(vector<vector<int>>& grid) {
        int size = grid.size();
        int cnt = 0;

        // 한 행을 key로 하는 map 생성
        map<vector<int>, int> m;

        for (int i = 0; i < size; i++)
            m[grid[i]]++;
        
        for (int i = 0; i < size; i++) {

            // 한 열을 key 값으로 생성
            vector<int> col(size);
            for (int j = 0; j < size; j++)
                col[j] = grid[j][i];
            
            // map에 해당 벡터를 key로 하는 원소가 존재한다면, 해당 원소의 개수 더함
            if (m.count(col))
                cnt += m[col];
        }

        return cnt;
    }
};