문제

문제 풀이
using System;
using System.Collections.Generic;
public class Solution
{
public int solution(int N, int[,] road, int K)
{
List<Tuple<int, int>>[] graph = new List<Tuple<int, int>>[N + 1];
for (int i = 1; i <= N; i++)
{
graph[i] = new List<Tuple<int, int>>();
}
int roadLength = road.GetLength(0);
for (int i = 0; i < roadLength; i++)
{
int start = road[i, 0];
int end = road[i, 1];
int time = road[i, 2];
graph[start].Add(new Tuple<int, int>(end, time));
graph[end].Add(new Tuple<int, int>(start, time));
}
int[] dist = new int[N + 1];
for (int i = 1; i <= N; i++) dist[i] = int.MaxValue;
dist[1] = 0;
bool[] visited = new bool[N + 1];
for (int i = 1; i <= N - 1; i++)
{
int minDist = int.MaxValue;
int currentVillage = -1;
for (int j = 1; j <= N; j++)
{
if (!visited[j] && dist[j] < minDist)
{
minDist = dist[j];
currentVillage = j;
}
}
visited[currentVillage] = true;
foreach (var neighbor in graph[currentVillage])
{
int nextVillage = neighbor.Item1;
int travelTime = neighbor.Item2;
if (dist[currentVillage] + travelTime < dist[nextVillage])
{
dist[nextVillage] = dist[currentVillage] + travelTime;
}
}
}
int count = 0;
for (int i = 1; i <= N; i++)
{
if (dist[i] <= K) count++;
}
return count;
}
}