7월 14일(금) - 그래프와 순회 (11724번)
11724번: 연결 요소의 개수
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
(C언어 풀이 활용)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] arr;
static int[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
arr = new int[N+1][N+1];
visited = new int[N+1];
for(int i=1; i<=M; i++)
{
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
arr[a][b] = 1;
arr[b][a] = 1;
}
int count=0;
for(int i=1; i<=N; i++)
{
if(visited[i] == 0)
{
dfs(i, N);
count = count +1 ;
}
}
System.out.println(count);
}
public static void dfs(int start, int num){
if(visited[start] == 1)
{
return;
}
visited[start] = 1;
for(int i=1; i<=num; i++)
{
if(arr[start][i] == 1 && visited[i] == 0)
{
dfs(i, num);
}
}
return;
}
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'백준(Java) > 23년 7월' 카테고리의 다른 글
[Java] 백준 - 1158번: 요세푸스 문제 (0) | 2023.07.18 |
---|---|
[Java] 백준 - 12865번: 평범한 배낭 (0) | 2023.07.17 |
[Java] 백준 - 2166번: 다각형의 면적 (0) | 2023.07.13 |
[Java] 백준 - 2217번: 로프 (0) | 2023.07.12 |
[Java] 백준 - 10845번: 큐 (0) | 2023.07.11 |
댓글