BFS와 완전탐색으로 푸는 문제
wires
를 하나씩 지워가며(전선을 끊으면서) 각각의 송전탑 개수를 구한다.queue
를 사용하여 BFS를 구현하고 cnt
는 그 전력망의 송전탑 개수가 들어간다.cnt2
는 다른쪽 전력망의 송전탑 개수인데, 인덱스 1
부터 시작했기 때문에 v.size()-1-cnt
가 된다.cnt2
와 cnt1
의 차이가 최소인 것을 갱신한다.#include <string>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
int gap(vector<vector<int>> v)
{
vector<int> visit(v.size());
queue<int> q;
q.push(1);
int cnt = 0;
while(!q.empty())
{
int cur = q.front();
q.pop();
if(visit[cur]==1) continue;
visit[cur]=1;
cnt++; // 이어진 송전탑 개수
for(int i=0;i<v[cur].size();i++)
{
q.push(v[cur][i]);
}
}
int cnt2 = v.size()-1-cnt;
return abs(cnt2-cnt);
}
int solution(int n, vector<vector<int>> wires) {
int answer = 1000;
for(int i=0;i<wires.size();i++)
{
vector<vector<int>> v(n+1);
for(int j=0;j<wires.size();j++)
{
if(i==j) continue;
int stt = wires[j][0];
int end = wires[j][1];
v[stt].push_back(end);
v[end].push_back(stt);
}
answer = min(answer, gap(v));
v.clear();
}
return answer;
}