1. 문제
n x n 크기의 정수 행렬 grid가 주어진다.
같은 행 r과 열 c로 이루어진 쌍 개수를 반환하라.
행과 열 쌍이 동일한 순서, 동일한 요소를 가진 배열인 경우 같다고 간주한다.
2. 풀이 과정
먼저 example 2를 보면 행 중에 2, 4, 2, 2 행이 두 개 있는 것을 확인할 수 있고 열에는 2, 4, 2, 2가 한 개 있는 것을 확인할 수 있다.
이 경우 모든 쌍을 고려해야 하기 때문에 쌍의 개수는 2개가 나온다.
만약 2, 4, 2, 2 행이 두 개, 열이 두 개 라면 쌍의 개수는 4개이다.
그렇다면 행의 패턴 별로 개수를 저장해 놓고, 열을 순회하면서 패턴이 같은 행의 개수를 꺼내오면 문제에서 원하는 쌍의 개수를 출력할 수 있다.
간편하게 비교하기 위해서 행과 열을 string으로 변환해서 비교하는 방법을 쓰기로 했다.
먼저 행을 순회하면서 문자열로 변환하여 dictionary에 저장하는데, 문자열의 개수와 함께 저장한다.
그 후에 열을 순회하면서 열을 문자열로 변환하고, 변환한 문자열이 dictionary에 존재한다면 몇 개 존재하는지 value값을 꺼내와서 result에 누적시킨 후 최종적으로 result를 반환한다.
public class Solution {
public int EqualPairs(int[][] grid)
{
int length = grid.Length;
var dict = new Dictionary<string, int>();
var result = 0;
for (int i = 0; i < length; ++i)
{
string str = string.Join(',', grid[i]);
if (!dict.TryAdd(str, 1))
{
dict[str]++;
}
}
for (int i = 0; i < length; ++i)
{
int[] temp = new int[length];
for (int j = 0; j < length; ++j)
{
temp[j] = grid[j][i];
}
string str = string.Join(',', temp);
if (dict.ContainsKey(str))
{
result += dict[str];
}
}
return result;
}
}
반응형
'LeetCode 풀이노트' 카테고리의 다른 글
[C#] 2090. K Radius Subarray Averages (0) | 2023.06.20 |
---|---|
[C#] 1161. Maximum Level Sum of a Binary Tree (0) | 2023.06.15 |
[C#] 1351. Count Negative Numbers in a Sorted Matrix (0) | 2023.06.08 |
[C#] 1318. Minimum Flips to Make a OR b Equal to c (0) | 2023.06.07 |
[C#] 1502. Can Make Arithmetic Progression From Sequence (0) | 2023.06.06 |