[ํ๋ก๊ทธ๋๋จธ์ค Lv3] : ๋คํธ์ํฌ
๋ฌธ์ ๋งํฌ
https://programmers.co.kr/learn/courses/30/lessons/43162
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ๋คํธ์ํฌ
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์
programmers.co.kr
์ฌ๋ฌ๋์ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ ๋, ์๋ก ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋ ์ปดํจํฐ๋ค์ ๊ทธ๋ฃน์ ๋คํธ์ํฌ๋ผ๊ณ ํ๋ค.
๋คํธ์ํฌ์ ์ด ๊ฐ์๋ฅผ ์ธ์ด๋ณด์.
ํ์ด
์ปดํจํฐ๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์์ง ์์๋ ๊ฐ์ ์ ์ผ๋ก ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ด๋ ๊ฐ์ ๋คํธ์ํฌ์ ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
์ด ๋ฌธ์ ๋ ๋ฐฑ์ค์ ์๋ ์ ๊ธฐ๋๋ฐฐ์ถ ๋ฌธ์ ์ ๋น์ทํ ๋ฌธ์ ์ธ ๋ฏํ๋ค.
์ฐธ๊ณ ๋งํฌ
https://www.acmicpc.net/problem/1012
1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์
www.acmicpc.net
ํ ์ง์ ์์ DFS๋ก ํ์์ ํด์ ๋ ์ด์ ์ด๋ํ์ง ๋ชปํ ๋ ๊น์ง ํ์์ ํ์ ๋ ์ด๋ ๊ฒฝ๋ก์์ ์์๋ ๋ ธ๋๋ค์ ๋ชจ๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์๋ค.
์ด๋ฏธ ํ์๋ ์ง์ ์ ์ค๋ณต๋ฐฉ๋ฌธ์ ๋ฐฉ์งํ๊ธฐ ์ํด bool ํ์ ์ visited ๋ฐฐ์ด์ ์ด์ฉํด์ ๋ฐฉ๋ฌธํ์๋ฅผ ํด์ฃผ์๋ค.
๊ทธ๋ฆฌ๊ณ computers[i][j] == 1 ์ด๋ฉด i์ j๋ ์ฐ๊ฒฐ์ด ๋์ด์๋ค๋ ๋ป์ด๋ค.
(visited[j] && computer[i][j] == 1) ์ด๋ฉด ์ฌ๊ทํจ์๋ฅผ ํตํด j์ปดํจํฐ๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
์ฝ๋ ์์ฑ
|
#include <string>
#include <vector>
using namespace std;
const int MAX_N = 200 + 5;
bool visited[MAX_N];
void dfs(int now, int n, vector<vector<int>> computers){
visited[now] = true;
for(int i = 0; i < n; i++){
if(!visited[i] && computers[now][i])
dfs(i, n, computers);
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
for(int i = 0; i < n; i++){
if(!visited[i]){
dfs(i, n, computers);
answer++;
}
}
return answer;
}
|
cs |