Notice
Recent Posts
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- flutter secure storage
- open weather api
- 포?코DX
- 누가 보기는 하는걸까...ㅠㅠ
- network
- Flutter2.8
- 플러터
- 플러터 책
- hero animation
- flutter
- 댓글이 하나도 없오...ㅠㅠ
- 주변에는 능력자 뿐이야!!
- 쒸익!!!!!!!!!
- 다트 책
- 크레인 인형뽑기
- dfs
- flutter_secure_storage
- FutureBuilder
- flutter_local_notification
- bloc
- 다트&플러터
- TODO
- Null Safety
- 코딩 잘하고 싶어!!
- flutter-layout
- 프로그래머스
- 편하다요
- 주니어개발자
- 이직
- 나도 코딩 잘할래!!!!!!!!!!!
Archives
- Today
- Total
오늘하루도 우힣ㅎ
네트워크 - c++ (DFS/BFS) 본문
https://programmers.co.kr/learn/courses/30/lessons/43162
문제는 위의 문제이다.
해당 문제는 DFS/BFS의 매우 전형적인 문제중 하나라고 생각이 된다.
문제 해결 방법
1. 가장 첫번째 노드에 대하여 DFS/BFS를 실행한다.
2. 각각의 노드들은 방문 됐을때 기록 돼야 한다.
3. DFS/BFS가 끝이나면 네트워크로 형성 되지 못한 노드를 찾아 다시 DFS/BFS를 실행한다.
4. 모든 노드가 방문이 됐다면 DFS/BFS를 실행하지 않는다.
=>깊이 혹은 넓이 우선 탐색이 끝나게 되면 하나의 네트워크가 형성이 된것이기에 answer을 하나올려주는 과정이 필요하다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
vector<bool> visit;
void dfs(vector<vector<int>> computers, int where){
visit[where] = true;//해당 노드를 방문 했음을 표시하는 수단이다.
for(int i=0;i<n;i++){
if(visit[i]==true||computers[where][i]==0) continue; //0이라면 해당 노드와 연결이 되어 있지않기 때문에 관계 지을 필요가 없다.
else dfs(i);//연결된 다음 노드로 넘어가 다시 연결된 노드를 찾게 된다.
}
}
/*
BFS의 경우 queue를 이용하여야 한다.
생성된 queue에 어떠한 것도 없을때까지 필요한 과정을 반복 하도록 한다.
더불어 visit을 통하여 queue에 이미 들어갔던것들을 표시하는 것도 잊지 말아야 한다.
*/
void bfs(vector<vector<int>> computers, int where){
visit[where] = true;//해당 노드를 방문 했음을 표시하는 수단이다.
queue<int> q;
q.push(where);
while(!q.empty()){
int front = q.front();
q.pop();
for(int i=0;i<n;i++){
if(visit[i]==true||computers[front][i]==0) continue;
else{
visit[i] = true;//해당 노드를 방문 했음을 표시하는 수단이다.
q.push(i);//해당 노드와 연결된 다른 노드들을 차례차례 넣게 된다.
}
}
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
for(int i=0;i<n;i++){
visit.push_back(true);
}
for(int i=0;i<n;i++){
if(visit[i]==false){
//dfs(i);
bfs(i);
answer++;
}
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Summer/Winter Coding(~2018)기지국 설치 - c++ (0) | 2020.05.21 |
---|---|
카카오프렌즈 컬러링북 - c++ (2017 카카오코드 예선) (0) | 2020.05.02 |
비밀지도 - c++ (2018 2018 KAKAO BLIND RECRUITMENT) (0) | 2020.04.20 |
크레인 인형뽑기 게임 - c++ (2019 카카오 개발자 겨울 인턴십) (0) | 2020.04.12 |
Comments