[D4] 창용 마을 무리의 개수 - 7465
성능 요약
메모리: 26,272 KB, 시간: 139 ms, 코드길이: 1,772 Bytes
제출 일자
2023-12-27 14:26
출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do
풀이 방법
1. 아는 관계이거나 몇 사람을 거쳐서 알 수 있다. (= 전부 연결되어 있다.)
2. 무리의 개수를 카운트해야한다.
3. 같은 관계는 반복해서 주어지지 않는다.
4. dfs를 통해 방문처리해주면 된다.
import java.util.StringTokenizer;
import java.util.Stack;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Solution {
static boolean[][] graph;
static boolean[] visit;
static int n;
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int tc = 1; tc <= T; tc++) {
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
graph = new boolean[n+1][n+1];
visit = new boolean[n+1];
for(int i = 0; i < m; i++){
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
graph[a][b] = graph[b][a] = true;
}
int result = 0;
for(int i = 1; i <= n; i++){
if(!visit[i]){
result++;
dfs(i);
}
}
sb.append("#" + tc + " " + result).append("\n");
}
System.out.println(sb);
}
private static void dfs(int start){
Stack<Integer> stack = new Stack<>();
visit[start] = true;
stack.push(start);
while(!stack.isEmpty()){
int cur = stack.pop();
for(int i = 1; i <= n; i++){
if(graph[cur][i] && !visit[i]){
stack.push(i);
visit[i] = true;
}
}
}
}
}
'알고리즘 - SWEA > D4' 카테고리의 다른 글
[SW expert Academy] SWEA 1218번 괄호 짝짓기 자바(Java) (0) | 2024.01.02 |
---|---|
[SW expert Academy] SWEA 1211번 Ladder2 자바(Java) (0) | 2023.12.30 |
[SW expert Academy] SWEA 1868번 파핑파핑 지뢰찾기 자바(Java) (0) | 2023.11.18 |
[SW expert Academy] SWEA 1210번 Ladder1 자바(Java) (0) | 2023.11.18 |
[SW expert Academy] SWEA 2819번 격자판의 숫자 이어 붙이기 자바(Java) (0) | 2023.11.18 |