[BOJ] 11724: 연결 요소의 개수 (JAVA)

2024. 1. 28. 21:51·코테/Algorithm
728x90

 

 

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

 

 

package 백준renew;

import java.io.*;
import java.util.*;

public class 실버2_11724_연결요소의개수 {
	static int computers, lines;
	static int map[][];
	static boolean visited[];
	static int cnt;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		computers = Integer.parseInt(st.nextToken());
		lines = Integer.parseInt(st.nextToken());
		
		map = new int[computers][computers];
		visited = new boolean[computers];
		
		for(int i=0; i<lines; i++) {
			st = new StringTokenizer(br.readLine());
			int num1 = Integer.parseInt(st.nextToken());
			int num2 = Integer.parseInt(st.nextToken());
			map[num1 -1][num2 -1] = 1;
			map[num2 -1][num1 -1] = 1;
		}
		
		for(int i=0; i<computers; i++) {
			if(!visited[i]) {
				DFS(i);
				cnt++;
			}
		}
		
		System.out.println(cnt);
	}
	static void DFS(int i) {
		visited[i] = true;
		
		for(int j=0; j<computers; j++) {
			if(!visited[j] && map[i][j] == 1) {
				DFS(j);
			}
		}
	}
}

 

 

이전에 풀었던 문제들과 비슷한 문제.

이전꺼 잘 풀어놓고 또 헷갈렸다 .. 다시 리마인드.

 

연결요소의 개념에 대해 이해가 안되어서 조금 고민했는데,

연결요소는 정점의 개수를 말하는 거였다. ex) 컴퓨터의 개수 

간선은 컴퓨터에 연결되어있는 네트워크의 개수라고 이해하니 편-안

 

앞으로 연결요소와 간선의 문제가 나오면,

    1) 2차원 배열을 컴퓨터의 개수만큼 만들어서

    2) 연결되어 있는 경우 [1번컴퓨터][2번컴퓨터] = 1 로 표시해준 뒤,

    3) 컴퓨터 방문처리할 1차원 배열을 만들어서

    4) 컴퓨터 개수 만큼 반복문을 돌면서, 방문하지 않은 컴퓨터에 대해 DFS 탐색.

         DFS에 전해줄 땐, 내가 지금 방문한 컴퓨터의 번호를 변수로 넘겨줘야 함.

    5) DFS 안에서 방문체크 해준 다음,

    6) 다른 컴퓨터와 연결되어 있는지 확인해야하니까 컴퓨터의 수 만큼 또 반복문을 돌면서

    7) 해당 컴퓨터에 방문을 하지 않았고, 해당 컴퓨터와 연결되어 있으면

    8) 재귀로 DFS에 연결된 컴퓨터의 번호를 변수로 넘겨준다!

로 풀어볼 생각이다 .. 다시 한번 리마인드 할 수 있어서 감사한 하루 🍀

 

 

<비슷한 유형이라고 생각하는 문제들>

 

[Baekjoon] 2606: 바이러스(실버3)

2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어

dropdew.tistory.com

 

 

[Programmers] Lv.3 네트워크 (DFS/BFS)

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설

dropdew.tistory.com

 

728x90

'코테 > Algorithm' 카테고리의 다른 글

[BOJ] 2178: 미로탐색 (JAVA)  (1) 2024.01.31
[Programmers] PCCE 모의고사 문제 풀이 (JAVA)  (1) 2024.01.31
[BOJ] 13565: 침투 (JAVA)  (0) 2024.01.28
[BOJ] 2468: 안전영역 (JAVA)  (1) 2024.01.27
[BOJ] 2606: 바이러스 (JAVA)  (1) 2024.01.26
'코테/Algorithm' 카테고리의 다른 글
  • [BOJ] 2178: 미로탐색 (JAVA)
  • [Programmers] PCCE 모의고사 문제 풀이 (JAVA)
  • [BOJ] 13565: 침투 (JAVA)
  • [BOJ] 2468: 안전영역 (JAVA)
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (419) N
      • App·Android (1)
      • BE (44)
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (11)
        • 스프링부트 시큐리티 & JWT (0)
        • PHP (6)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (18) N
        • AI (7)
        • Bigdata (6)
        • Database (1)
        • 빅데이터분석기사 (3) N
      • Infra (0)
      • Activity (1) N
        • Education (0)
        • Intern (0)
        • 리모트 인턴십 6기 (1) N
        • 구름톤 유니브 4기 (0)
        • SW교육기부단 15기 (0)
      • CS (8)
      • 취준 (13)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (3)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 회고 (0)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    브루트포스 알고리즘
    최단경로
    정렬
    투포인터
    그래프탐색
    백준
    그리디알고리즘
    다이나믹프로그래밍
    누적합
    이분탐색
    수학
    구현
    매개변수탐색
    그래프이론
    티스토리챌린지
    자료구조
    시뮬레이션
    오블완
    문자열
    너비우선탐색
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[BOJ] 11724: 연결 요소의 개수 (JAVA)
상단으로

티스토리툴바