-
프로그래머스 네트워크 - C++쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 5. 18. 21:05반응형
#include <string> #include <vector> #include <queue> using namespace std; bool visit[210]; void bfs(int start, vector<vector<int>> computers, int n){ visit[start] = true; queue<int> q; q.push(start); while(!q.empty()) { int temp = q.front(); q.pop(); for(int i = 0; i < n; i++){ if(!visit[i] && computers[temp][i] == 1){ visit[i] = true; q.push(i); } } } } void dfs(int start, vector<vector<int>> computers, int n){ visit[start] = true; for(int i = 0; i < n; i++){ if(!visit[i] && computers[start][i]) dfs(i, computers, n); } } int solution(int n, vector<vector<int>> computers) { int ans = 0; for(int i = 0; i < n; i++){ if(!visit[i]){ //bfs(i, computers, n); dfs(i, computers, n); ans++; } } return ans; }
문제를 보고 나서는 가장 익숙한 bfs로 먼저 풀었습니다. 평범하게 큐를 이용해서 탐색을 진행했으며 큐에 새 원소가 들어가는 조건은 아직 방문하지 않은 네트워크, 연결이 되어 있는 네트워크입니다. 이를 통해서 탐색을 쭉 하면 ans 변수로 네트워크의 갯수가 카운트되어 리턴됩니다.
dfs의 경우는 더 간단하게 위와 같은 조건이라면 그 지점에서 dfs를 또 실행해 처리하는 것입니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 레벨 2 - 큰 수 만들기 C++ (0) 2021.05.19 프로그래머스 입국심사 - C++ (0) 2021.05.19 프로그래머스 N으로 표현 - C++ (0) 2021.05.13 백준 1854 K번째 최단경로 찾기 - C++ (다익스트라, 우선순위 큐) (0) 2021.05.11 백준 4781 사탕가게 - C++ (0) 2021.05.10