[백준(BOJ)] 11724번 연결 요소의 개수(DFS, BFS) C++

2022. 8. 21. 18:39· 백준 문제풀이(BOJ PS)
목차
  1. 어떤 문제인가?
  2. 접근 방법
  3. 무엇이 어려웠는가?
  4. 배운 점

문제 : https://www.acmicpc.net/problem/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

 

 

어떤 문제인가?

그래프를 입력받고 연결 요소의 개수를 출력하면 된다.

이 문제를 풀기위해선 먼저 연결 요소가 무엇인지 알아야 한다.

간단하게 말하면 나누어진 각각의 그래프들을 연결 요소라고 한다.

 

문제의 첫 번째 예시대로 입력을 받으면

1-2-5,  3-4-6이 연결된 두 개의 연결 요소가 존재하는 것이다.

 

접근 방법

한 정점을 시작으로 그래프를 탐색한다.

그렇게 되면 그 정점과 연결된 정점들은 방문처리가 된다.

즉, 하나의 연결 요소를 이루는 정점들이라는 소리이다.

 

따라서, 한 정점으로 그래프 탐색을 끝난 후에도 어떠한 정점이 방문처리가 되어있지 않다는 것은

서로 다른 연결 요소에 속해 있다는 소리이다.

 

int n, m;
cin >> n >> m;

문제에서 주어진 변수를 선언하고 입력받는다.

 

while (m--) {
    int a, b;
    cin >> a >> b;
    graph[a].push_back(b);
    graph[b].push_back(a);
}

간선의 개수만큼 정점을 입력받는다.

 

int cnt = 0;

연결 요소의 개수를 저장할 변수이다.

 

for (int i = 1; i <= n; i++) {
    if (!visited[i]) {
        //bfs(i);
        dfs(i);
        cnt++;
    }
}

그리고 반복문을 통해 그래프 탐색을 할 것이다.

만약 i 번째 인덱스가 방문되지 않았다면 그래프 탐색을 진행한다.

 

이때, dfs, bfs 어떠한 방식으로 해도 상관없다.

if문의 조건을 통과하여 함수가 호출될 때마다 cnt를 증가시켜준다.

 

문제의 예시인 1-2-5, 3-4-6을 보자.

맨 처음엔 1이 방문되지 않았으므로 방문을 시작한다.

그러면 1,2,5가 방문처리되어있을 것이다.

 

반목 문을 돌다 3차례가 되었을 때 방문되지 않았으므로 방문을 시작한다.

그르면 3,4,6이 방문처리되었을 것이다.

 

각 경우마다 cnt를 증가시켜주어 연결 요소의 개수가 2개임을 알 수 있다.

 

cout << cnt;

cnt를 출력해주면 끝!!

 

 

무엇이 어려웠는가?

처음엔 연결요소의 개수를 어떻게 측정해야하나 잘 모르겠었다.

그래프 탐색과, 연결요소의 개념을 다시 천천히 생각해보니 금방 해답을 찾을 수 있었다.

 

 

배운 점

아무리 배웠던 내용이라도 기초와 복습이 중요하다.

내 뇌는 잘 까먹어서 주기적으로 상기를 시켜줘야한다ㅋㅋ

'백준 문제풀이(BOJ PS)' 카테고리의 다른 글

[백준(BOJ)] 7576번 토마토 C++  (0) 2022.08.22
[백준(BOJ)] 2468번 안전 영역 C++  (0) 2022.08.21
[백준(BOJ)] 2178번 미로탐색 C++  (0) 2022.08.21
[백준(BOJ)] 1260번 DFS와 BFS C++  (0) 2022.08.21
[백준(BOJ)] 9084번 동전 C++  (0) 2022.08.17
  1. 어떤 문제인가?
  2. 접근 방법
  3. 무엇이 어려웠는가?
  4. 배운 점
'백준 문제풀이(BOJ PS)' 카테고리의 다른 글
  • [백준(BOJ)] 7576번 토마토 C++
  • [백준(BOJ)] 2468번 안전 영역 C++
  • [백준(BOJ)] 2178번 미로탐색 C++
  • [백준(BOJ)] 1260번 DFS와 BFS C++
팜준
팜준
팜준
코드가 자라나는 텃밭
팜준
전체
오늘
어제
  • 분류 전체보기
    • 회고
    • 자료구조(Data Structure)
    • 백준 문제풀이(BOJ PS)
    • 대외활동(Activity)
    • 알고리즘(Algorithm)
    • 운영체제(OS, Operating System)
    • AWS
    • 취업준비
    • 일기

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 깊이우선탐색
  • DP
  • 그리디알고리즘
  • 자바
  • 덱
  • 완전탐색
  • java
  • 백준
  • 다이나믹 프로그래밍
  • 백트랙킹
  • 그래프탐색
  • DFS
  • 알고리즘
  • BFS
  • 깃허브
  • 일기
  • 자료구조
  • 큐
  • deque
  • 깃

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
팜준
[백준(BOJ)] 11724번 연결 요소의 개수(DFS, BFS) C++
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.