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;
}
};