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

 

 

 

반응형