https://school.programmers.co.kr/learn/courses/30/lessons/43162
노드 하나 잡고 탐색하고, 방문 안한 노드 잡고 탐색하고... 탐색이 끝날 때 마다 정답 횟수만 카운팅 해주면 된다.
어려울건 없는데 방향 그래프인지 알고 삽질에, 방문 배열 체크하는거 까먹어서 시간을 좀 많이 썼다.
using System;
using System.Linq;
using System.Collections.Generic;
public class Solution {
public class Node {
public int index;
HashSet<int> edges = new HashSet<int>();
public Node(int i){
index = i;
}
public void AddEdge(int n){
edges.Add(n);
}
public int[] GetEdges(){
return edges.ToArray();
}
}
public int solution(int n, int[,] computers) {
var nodes = new Node[n];
var visited = new bool[n];
var visitCount = 0;
var groupCount = 0;
for(int x = 0; x < n; x++){
for(int y = 0; y < n; y++){
if(nodes[x] == null){
nodes[x] = new Node(x);
}
if(nodes[y] == null){
nodes[y] = new Node(y);
}
if(computers[x, y] == 1){
nodes[x].AddEdge(y);
}
}
}
Queue<Node> nextNodes = new Queue<Node>();
nextNodes.Enqueue(nodes[0]);
visited[0] = true;
while(visitCount < n){
var node = nextNodes.Dequeue();
var edges = node.GetEdges();
visitCount++;
for(int i = 0; i < edges.Length; i++){
var target = edges[i];
if(visited[target] == false){
visited[target] = true;
nextNodes.Enqueue(nodes[edges[i]]);
}
}
if(nextNodes.Count == 0){
for(int i = 0; i < n; i++){
if(visited[i] == false){
visited[i] = true;
nextNodes.Enqueue(nodes[i]);
break;
}
}
groupCount++;
}
}
return groupCount;
}
}
너무 어렵게 푼거같음.