CodingTest/LeetCode

[LeetCode] 2352. Equal Row and Column Pairs, Medium

뜸부깅 2025. 4. 16. 18:18
반응형

1. 문제

  • n x n 크기의 grid가 주어질 때, 행과 열이 같은 경우의 수를 반환하라.

2. 해결

function equalPairs(grid: number[][]): number {
    const rowMap = new Map<string, number>();
    const colMap = new Map<string, number>();

    for (let i = 0; i < grid.length; i++) {
        const row = grid[i].join(',');
        const col = grid.map(r => r[i]).join(',');

        rowMap.set(row, (rowMap.get(row) || 0) + 1);
        colMap.set(col, (colMap.get(col) || 0) + 1);
    }

    let ans = 0;

    for (const [str, rowCount] of rowMap) {
        const colCount = colMap.get(str) || 0;
        ans += rowCount * colCount;
    }

    return ans;
}
  • 이 문제는 접근을 잘하긴 했는데, 2가지 포인트를 놓쳤다.
  • row와 col의 수를 만들 때, 구분자 없이 저장했는데 이러면 [[11,1], [1, 11]]과 같이 연속된 문자열이 나타나는 경우 저장이 제대로 되지 않는다. => 별도 구분자가 필요.
  • rowMap을 탐색하면서, colMap에 존재하면 rowMap에 저장되어 있는 값을 더해주며 ans를 늘려갔는데,이러면 경우의 수가 제대로 고려되지 않는다 => row에 저장된 값과 col에 저장된 값을 곱해줘야 모든 경우의 수가 나온다.
    • 예를 들어, row에 2번 등장하는 패턴이 있고 col에 1번 등장한다고 할 때 [a,0] [b,0]으로 2번이 맞다.
    • 근데, row와 col 모두 2번 등장하는 경우, [a,0] [a,1] [b,0] [b,1]로 4번이 되야 한다.
    • 따라서 row의 가능한 수 * col의 가능한 수를 해야 한다.