Make Unreal REAL.
article thumbnail
Level 3. 네트워크

 

 

i와 j 컴퓨터가 연결된 경우, i와 j의 연결을 끊고 i와 j부터 DFS를 수행해 연결된 컴퓨터들을 처리한다.

 

#include <iostream>
#include <vector>

using namespace std;

void rDFS(int i, int j, int n, vector<vector<int>>& computers)
{
    computers[i][j] = computers[j][i] = 0;

    for (int k = 0; k < n; ++k)
        if (computers[i][k])
            rDFS(i, k, n, computers);

    for (int k = 0; k < n; ++k)
        if (computers[j][k])
            rDFS(j, k, n, computers);
}

int solution(int n, vector<vector<int>> computers)
{
    int answer = 0;

    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j <= i; ++j)
        {
            if (computers[i][j])
            {
                rDFS(i, j, n, computers);
                ++answer;
            }
        }
    }
            
    return answer;
}

 

내 풀이는 이중 for문을 사용해 다소 비효율적이지만, 이 풀이는 computers[i][j] == computers[j][i]인 점을 이용해 n 크기의 방문 여부를 별도로 저장해 for문 1개로 해결했다.

 

#include <iostream>
#include <vector>

using namespace std;

void rDFS(int i, vector<vector<int>>& computers, vector<bool>& visited)
{
    visited[i] = true;

    for (int j = 0; j < computers.size(); ++j)
        if (!visited[j] && computers[i][j])
            rDFS(j, computers, visited);
}

int solution(int n, vector<vector<int>> computers)
{
    int answer = 0;
    vector<bool> visited(n, false);

    for (int i = 0; i < n; ++i)
    {
        if (visited[i] == false)
        {
            rDFS(i, computers, visited);
            ++answer;
        }
    }
            
    return answer;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 3. 등굣길  (0) 2023.07.18
Level 3. 최고의 집합  (0) 2023.07.17
Level 3. 단어 변환  (0) 2023.07.15
Level 3. 베스트앨범  (0) 2023.07.14
Level 3. 이중우선순위큐  (0) 2023.07.13
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그