๋ฌธ์ ์ค๋ช
๋คํธ์ํฌ๋ ์ปดํจํฐ ์ํธ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ตํํ ์ ์๋๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํจํฐ A์ ์ปดํจํฐ B๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด์๊ณ , ์ปดํจํฐ B์ ์ปดํจํฐ C๊ฐ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ ๋ ์ปดํจํฐ A์ ์ปดํจํฐ C๋ ๊ฐ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ ๋ณด๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ปดํจํฐ A, B, C๋ ๋ชจ๋ ๊ฐ์ ๋คํธ์ํฌ ์์ ์๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ปดํจํฐ์ ๊ฐ์ n, ์ฐ๊ฒฐ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด computers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋คํธ์ํฌ์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์์ค.
์ ํ์ฌํญ
- ์ปดํจํฐ์ ๊ฐ์ n์ 1 ์ด์ 200 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- ๊ฐ ์ปดํจํฐ๋ 0๋ถํฐ n-1์ธ ์ ์๋ก ํํํฉ๋๋ค.
- i๋ฒ ์ปดํจํฐ์ j๋ฒ ์ปดํจํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด computers[i][j]๋ฅผ 1๋ก ํํํฉ๋๋ค.
- computer[i][i]๋ ํญ์ 1์ ๋๋ค.
์ ์ถ๋ ฅ ์
n computers return
3 | [[1, 1, 0], [1, 1, 0], [0, 0, 1]] | 2 |
3 | [[1, 1, 0], [1, 1, 1], [0, 1, 1]] | 1 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์์ #1
์๋์ ๊ฐ์ด 2๊ฐ์ ๋คํธ์ํฌ๊ฐ ์์ต๋๋ค.
์์ #2
์๋์ ๊ฐ์ด 1๊ฐ์ ๋คํธ์ํฌ๊ฐ ์์ต๋๋ค.
ํ์ด
ํต์ฌ์ ๋คํธ์ํฌ๊ฐ ๋ถ๋ฆฌ๋์ด ์๋์ง ํ์ธํ๋ ๊ฒ!
๊ฐ ์ปดํจํฐ ๊ฐ์๋งํผ for๋ฌธ์ ๋๋ฉด์ ์ฐ๊ฒฐ๋ ๋คํธ์ํฌ๋ฅผ ๋ชจ๋ ๋์ผ๋ฉด ๋๋ค. ์ปดํจํฐ ํ๋ ํ์ธํ ๋๋ง๋ค ans๋ฅผ ์ฆ๊ฐ์์ผ์ค๋ค.
ex) ์์ 2 [[1, 1, 0], [1, 1, 1], [0, 1, 1]], isVisited[0, 1, 2]=false;
01. 1๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ๋คํธ์ํฌ ๋ชจ๋ ์ญ์ -> [1, 2] ์ญ์ , [2, 3] ์ญ์
- isVisited[0] = true
- DFS ๊ฒฐ๊ณผ isVisited[1] = true, isVisited[2] = true;
02. 2๋ฒ ์ปดํจํฐ ๊ฒ์ฌ ํจ์ค
03. 3๋ฒ ์ปดํจํฐ ๊ฒ์ฌ ํจ์ค
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#define MAX 201
bool isVisited[MAX] = {0, };
using namespace std;
void dfs(int start, int n, vector<vector<int>> computers) {
isVisited[start] = 1; // ๋ฐฉ๋ฌธ ํ์
for(int i=0; i<n; i++) {
// ํ์ฌ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ ์ค ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ปดํจํฐ๊ฐ ์๋ ๊ฒฝ์ฐ
// dfs ๋๋ฉด์ ๋คํธ์ํฌ๋ฅผ ๋์ด์ค๋ค.
if(isVisited[i] == 0 && computers[start][i] == 1) {
dfs(i, n, computers);
}
}
}
void bfs(int start, int n, vector<vector<int>> computers){
queue<int> q;
q.push(start);
isVisited[start] = 1; // ๋ฐฉ๋ฌธ ํ์
while(!q.empty()){
int front = q.front();
q.pop();
for (int i=0; i<n; i++){
if (isVisited[i] == 0 && computers[front][i] == 1){
isVisited[i] = true;
q.push(i);
}
}
}
}
int solution(int n, vector<vector<int>> computers) {
int answer=0;
for (int i=0; i<n; i++){
if (isVisited[i] == false){
bfs(i, n, computers);
answer++;
}
}
return answer;
}
https://programmers.co.kr/learn/courses/30/lessons/43162
์ค๋ช ์ฐธ๊ณ https://eory96study.tistory.com/32
'โจ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 2231๋ฒ : ๋ถํดํฉ (0) | 2021.08.27 |
---|---|
[๋ฐฑ์ค/C++] 2798๋ฒ : ๋ธ๋์ญ (0) | 2021.08.27 |
[๋ฐฑ์ค/C++] 2606๋ฒ : ๋ฐ์ด๋ฌ์ค(BFS) (0) | 2021.08.24 |
[๋ฐฑ์ค/C++] 10870๋ฒ : ํผ๋ณด๋์น ์ 5 (0) | 2021.08.24 |
[๋ฐฑ์ค/C++] 10872๋ฒ : ํฉํ ๋ฆฌ์ผ (0) | 2021.08.24 |
๋๊ธ