반응형
728x170
이것도 생각한지 10분만에 내 머릿속에 있는 생각이 맞았다는 것이 너무 기뻐서
팔짝 뜀
내 생각이 점차 논리적으로 맞아가고 있네
https://programmers.co.kr/learn/courses/30/lessons/43162
#맞는 풀이
#include <string>
#include <vector>
#include <queue>
using namespace std;
int visited[201][201]; // 네트워크를 연결상태 [from][to] 구분하기 위함
bool node[201]; //[노드 방문했는지]
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
//모든 노드를 조사해야함
for(int i = 0; i<n; i++){
if(node[i]) continue; //이미 조사한 노드면 넘어감.
node[i] = true; //조사 안했으면 이제 조사하니까 true -> 조사 안했다면 새로운 네트워크임
answer++; // 네트워크 번호를 붙임.
queue<int> q; //해당 노드에서 연결된 노드를 넣을 것임
//현재 조사하고있는 노드와 연결되어있는 노드가 q에 담김(자신 포함)
for(int j = 0; j<n; j++){
//연결되어 있다면 -> 연결정보 업데이트
if(computers[i][j] == 1){
visited[i][j] = answer; //answer가 네트워크 번호임.
visited[j][i] = answer; // 서로 연결되어있으므로
//연결된 j번 노드를 queue에 넣음
q.push(j);
}
}
//q에 담긴 모든 노드를 조사함 -> q는 조사하면서 다시 노드들이 담길 것임.
while(!q.empty()){
int x = q.front(); //현재 조사할 노드;
q.pop();
if(node[x]) continue; //이미 조사했던 것이면 pass
node[x] = true; //조사 안했으면 위와 같이 다시 함.
//현재 조사하고있는 노드와 연결되어있는 노드가 q에 담김(자신 포함)
for(int j = 0; j<n; j++){
//연결되어 있다면 -> 연결정보 업데이트
if(computers[x][j] == 1){
visited[x][j] = answer; //answer가 네트워크 번호임.
visited[j][x] = answer; // 서로 연결되어있으므로
//연결된 j번 노드를 queue에 넣음
q.push(j);
}
}
}
//이 for문 한번이 돌면 해당 node와 연결되어있는 모든 노드는 조사한 것임 -> 한 개의 네트워크 조사
}
return answer;
}
Level 3 에서 쉬운 것이겠지만
내 처음 생각한대로 풀어서 맞았다는 것이 너무 기분이 좋다.
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
백준, BOJ, 2468번, 안전 영역 : C++ [CPP] *** (0) | 2021.11.27 |
---|---|
프로그래머스, 보석쇼핑 : C++ [CPP] (0) | 2021.11.21 |
프로그래머스, 정수 삼각형 : C++ [CPP] (0) | 2021.11.18 |
프로그래머스, 가장 큰 정사각형 찾기 : C++ [CPP] (0) | 2021.11.18 |
프로그래머스, 방문 길이 : C++ [CPP] (0) | 2021.11.18 |