Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 백준
- Programmers
- DeferredRendering
- RVO
- C
- NRVO
- 언리얼엔진5
- UnrealEngine4
- 1563
- softeer
- IFileDialog
- RootMotion
- 티스토리챌린지
- 팰린드롬 만들기
- Frustum
- const
- Unreal Engine5
- directx
- 줄 세우기
- GeeksForGeeks
- UE5
- 오블완
- UnrealEngine5
- 2294
- winapi
- algorithm
- 프로그래머스
- DirectX11
- C++
- baekjoon
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 전력망을 둘로 나누기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/86971?language=cpp
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
int DFS(vector<vector<int>>& graph, int node, int parentNode)
{
int count = 1;
for (int i = 0; i < graph[node].size(); i++)
{
if (graph[node][i] == -1) continue;
if (graph[node][i] == parentNode) continue;
count += DFS(graph, graph[node][i], node);
}
return count;
}
int solution(int n, vector<vector<int>> wires) {
int answer = 100000;
vector<vector<int>> graph(101);
for (int i = 0; i < wires.size(); i++)
{
int first = wires[i][0];
int second = wires[i][1];
graph[first].push_back(second);
graph[second].push_back(first);
}
for (int i = 0; i < wires.size(); i++)
{
vector<vector<int>> tempGraph = graph;
int first = wires[i][0];
int second = wires[i][1];
for (int i = 0; i < tempGraph[first].size(); i++)
{
if (tempGraph[first][i] == second)
{
tempGraph[first][i] = -1;
}
}
for (int i = 0; i < tempGraph[second].size(); i++)
{
if (tempGraph[second][i] == first)
{
tempGraph[second][i] = -1;
}
}
int firstGroup = DFS(tempGraph,first, -11);
int secondGroup = DFS(tempGraph, second, -11);
int absValue = abs(firstGroup - secondGroup);
if (absValue <= answer) answer = absValue;
}
return answer;
}
|
cs |
그냥 아주 무난하게 푼 것 같다.
wires값으로 먼저 그래프모델링 한 다음, 다시 wires돌면서 연결을 끊어주고, 나눠진 두 그룹에 대해서 탐색을 진행했다.
문제에 '트리'라고 강조된 이유는, 3-4 라는 전선을 끊는 순간, 두 그룹은 각각 3과 4를 루트노드로 한 트리가 형성되기 때문인 것 같다. 그래서 DFS탐색을 진행할 때 부모노드로 다시 올라가는 경우만 제외시키면 따로 방문체크를 할 이유가 없다.
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 괄호 회전하기 (0) | 2022.09.05 |
---|---|
[Algorithm] Programmers :: 다음 큰 숫자 (0) | 2022.08.29 |
[Algorithm] Programmers :: 삼각 달팽이 (0) | 2022.08.29 |
[Algorithm] Programmers :: 방금그곡 (0) | 2022.08.27 |
[Algorithm] Programmers :: 튜플 (0) | 2022.08.26 |