https://school.programmers.co.kr/learn/courses/30/lessons/86971
[프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr](https://school.programmers.co.kr/learn/courses/30/lessons/86971)
접근 방법
- 트리를 만든다.
- 노드 하나씩 방문한다.
- 2-1. 끊어질 노드를 방문 표시를 한다.
- 2-2. bfs로 방문할 노드들의 개수를 구한다.
- 차이는 (총 노드의 개수 - 방문한 노드 개수) - 방문한 노드 개수의 절대값이다.
- n=9, 첫번째 노드가 연결된 개수 = 8일 경우 두 전력망이 가진 노드의 개수 차이는 7이다.
- 차이를 계산한 배열 중 가장 최솟값을 반환한다.
function solution(n, wires) {
const result = \[\];
//트리 만들기
const tree = Array.from(Array(n + 1), () => \[\]);
wires.map((element) => {
let \[a, b\] = element;
tree\[a\].push(b);
tree\[b\].push(a);
});
// 기준이 되는 노드 eles
tree.forEach((eles, i) => {
eles.forEach((v) => {
const visited = Array.from(Array(n + 1), () => false);
// 끊어졌다고 생각해야 되는 노드 v를 방문했다고 처리하고 기준이 되는 노드와 연결된 노드 개수를 찾는다.
visited\[v\] = true;
result.push(getBfsCount(i, visited, tree));
});
});
const DiffArr = result.map((v) => Math.abs((n - v) - v));
return Math.min(...DiffArr);
}
// 노드와 연결된 노드 개수를 반환함
function getBfsCount(start, visited, tree) {
const q = \[start\];
let cnt = 0;
while (q.length !== 0) {
const current = q.shift();
visited\[current\] = true;
tree\[current\].forEach((v) => {
if (!visited\[v\]) {
q.push(v);
}
});
cnt++;
}
return cnt;
}
'algorithm > programmers' 카테고리의 다른 글
[JS ] 3차 방금그곡 (2) | 2023.10.24 |
---|---|
[JS] 오픈채팅방 - Object와 Map의 차이점 (0) | 2023.10.10 |
[PYTHON/파이썬] Level2 [1차]캐시 - LRU/deque/maxlen (0) | 2023.02.18 |
[PYTHON/파이썬] level 2 괄호회전하기 - deque (0) | 2023.02.18 |
[PYTHON/파이썬] Level2 행렬의 곱셈 - 3중 for문 / zip (0) | 2023.02.09 |
댓글