넘치게 채우기

[LeetCode] 1267. Count Servers that Communicate 본문

PS/LeetCode

[LeetCode] 1267. Count Servers that Communicate

riveroverflow 2025. 1. 23. 10:25
728x90
반응형

https://leetcode.com/problems/count-servers-that-communicate/description/

leetcode - Count Servers that Communicate

문제 유형: 행렬

문제 난이도: Medium

 

문제

You are given a map of a server center, represented as a m * n integer matrix grid, where 1 means that on that cell there is a server and 0 means that it is no server. Two servers are said to communicate if they are on the same row or on the same column.

Return the number of servers that communicate with any other server.

 

서버 센터의 지도를 받는다. m * n의 정수 행렬 grid를 받는다.

1은 셀에 서버가 있다는 것이고, 0은 서버가 없다는 것이다.

두 개 이상의 서버가 같은 열 또는 행을 공유하면, 연결된 것이다.

연결된 상태의 서버의 개수를 반환하시오.

 

풀이

행렬을 한 번 순회하면서 해당 열 및 행에 부속된 서버들의 개수를 누적한다.

다시 한번 순회하면서 해당 서버가 소속된 열이나 행에 서버소속이 2개 이상 있다면, 정답을 1 누적한다.

최종 답을 반환해주면 된다.

 

코드

C++

class Solution {
public:
    int countServers(vector<vector<int>>& grid) {
        int n = grid.size();
        int m = grid[0].size();
        int ans = 0;
        vector<int> rows(n), cols(m);
        for(int i = 0; i < n; ++i) {
            for(int j = 0; j < m; ++j) {
                if(grid[i][j]) {
                    rows[i]++;
                    cols[j]++;
                }
            }
        }

        for(int i = 0; i < n; ++i) {
            for(int j = 0; j < m; ++j) {
                if(grid[i][j] && (rows[i] > 1 || cols[j] > 1)) ans++;
            }
        }

        return ans;
    }
};
728x90
반응형