๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/43162
ํ์ด
๐ก ๋ฌธ์ ์ ๊ทผ
- ํ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ๋ค์ ์ปดํจํฐ๋ฅผ ํ์ํ๊ณ , ๊ทธ ๋ค์ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ฅผ ๊ณ์ํด์ ํ์ํด ๋๊ฐ๋ค.
- ํ์ ์ค ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ํ๋์ ๋คํธ์ํฌ๊ฐ ์์ฑ๋ ๊ฒ = ๋คํธ์ํฌ + 1
๐ก DFS, ์ฌ๊ทํจ์
- 1๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด dfs ํจ์๋ฅผ ํธ์ถํ๋ค.
- 1๋ฒ ์ปดํจํฐ๊ฐ 2๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
- 2๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด dfs ํจ์๋ฅผ ํธ์ถํ๋ค.
์ด๋, 2๋ฒ ์ปดํจํฐ์ 1๋ฒ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ ์ ์ ์์ง๋ง, 1๋ฒ์งธ ์ปดํจํฐ๋ ์ด๋ฏธ ํ์ํ ์ปดํจํฐ์ด๋ค.
์ด ๊ณผ์ ์ ์๋์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์๋ค.
- ๋ฐฉ๋ฌธํ์ง ์์ i๋ฒ์งธ ์ปดํจํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด dfs ํจ์๋ฅผ ํธ์ถํ๋ค.
- i๋ฒ์งธ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด์๋ ์ปดํจํฐ๋ฅผ ํ์ํ๊ธฐ ์ํด dfs ํจ์๋ฅผ ํธ์ถํ๋ค.
์ด๋, ํ์ํ๋ ์ปดํจํฐ๋ ๋ฐฉ๋ฌธํ์ง ์์ ์ปดํจํฐ์ด๋ค. - dfs ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๋์ด์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๊ฐ ์๋ ๊ฒ์ด๋ฏ๋ก ๋คํธ์ํฌ๋ฅผ ์ถ๊ฐํ๋ค.
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
vector<bool> isVisited;
void dfs(int cur, int n, vector<vector<int>> computers) {
isVisited[cur] = true; // ๋ฐฉ๋ฌธ ํ๊ธฐ
for (int i = 0; i < n; i++) {
// ๋ฐฉ๋ฌธํ์ง ์์ ์ปดํจํฐ์ด๊ณ , ํ์ฌ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋์ด ์๋ค๋ฉด
if (!isVisited[i] && computers[cur][i]) {
dfs(i, n, computers);
}
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
isVisited.assign(n, false);
for (int i = 0; i < n; i++) { // ์ปดํจํฐ ๋ฐฉ๋ฌธ
if (!isVisited[i]) { // ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ปดํจํฐ
dfs(i, n, computers);
answer++;
}
}
return answer;
}
'๐ญ Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA][C++] 1289. ์์ฌ์ ๋ฉ๋ชจ๋ฆฌ ๋ณต๊ตฌํ๊ธฐ (0) | 2024.10.16 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 2002๋ฒ: ์ถ์ (0) | 2024.06.14 |
[ํ๋ก๊ทธ๋๋จธ์ค][C++] ํฐ ์ ๋ง๋ค๊ธฐ (0) | 2024.06.02 |
[ํ๋ก๊ทธ๋๋จธ์ค][C++] ํ๊ฒ ๋๋ฒ (0) | 2024.05.31 |
[ํ๋ก๊ทธ๋๋จธ์ค][C++] ์คํฌํธ๋ฆฌ (0) | 2024.05.31 |