기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - SWEA/D4

[SW expert Academy] SWEA 7465번 창용 마을 무리의 개수 자바(Java)

2023. 12. 27. 14:29

[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

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

풀이 방법

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
    '알고리즘 - SWEA/D4' 카테고리의 다른 글
    • [SW expert Academy] SWEA 1218번 괄호 짝짓기 자바(Java)
    • [SW expert Academy] SWEA 1211번 Ladder2 자바(Java)
    • [SW expert Academy] SWEA 1868번 파핑파핑 지뢰찾기 자바(Java)
    • [SW expert Academy] SWEA 1210번 Ladder1 자바(Java)
    기몽수
    기몽수

    티스토리툴바