일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 프로그래머스 알고리즘 공부
- 지혜를가진흑곰
- 책알남
- 알고리즘트레이닝
- 성분
- 독후감
- 다독
- 자바
- 백준알고리즘
- 알고리즘 공부
- Java
- 주식
- 자바스크립트
- algorithmTest
- C++
- 서평
- 경제
- 채권
- C
- 프로그래밍언어
- 책을알려주는남자
- JavaScript
- 화장품
- 투자
- 재테크
- algorithmStudy
- 돈
- 독서
- algorithmtraining
- 알고리즘공부
Archives
- Today
- Total
탁월함은 어떻게 나오는가?
[Algorithm] 전력망을 둘로 나누기 ( Programmers - JavaScript ) 본문
[Snow-ball]프로그래밍(컴퓨터)/Algorithm Training
[Algorithm] 전력망을 둘로 나누기 ( Programmers - JavaScript )
Snow-ball 2024. 1. 1. 12:55반응형
문제 설명
n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다.당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되느 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다.
송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷핟록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 soultion 함수를 완성해주세요.
제한사항
입출력 예
입출력 예 설명
입출력 예 #1
입출력 예 #2
입출력 예 #3
문제풀이
이번 [ 전력망을 둘로 나누기 ] 문제의 경우에는 모든 선들을 잘르고 나서 송전탑의 개수의 차이가 최소로 답을 도출하게 하는 문제이다.
그렇다는것은 이번 문제는 모든 케이스로 선을 잘라보고 그에 대한 차이를 비교해야한다.
그렇기 때문에 2중 loop 를 사용하여 모든 케이스의 선들을 잘랐으며, calculateSize 함수로 갯수를 측정하여 비교하는 방식으로 문제가 해결되었다.
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
|
function solution(n, wires) {
let answer = n;
for (let i = 0; i < wires.length; ++i) {
const adjacencyList = Array.from({ length: n + 1 }, () => []);
const [first, second] = wires[i];
for (let j = 0; j < wires.length; ++j) {
const [third, fourth] = wires[j];
if (first !== third || second !== fourth) {
adjacencyList[third].push(fourth);
adjacencyList[fourth].push(third);
}
}
const visitedArr = Array.from({ length: n + 1 }, () => false);
const size = calculateSize(first, adjacencyList, visitedArr);
answer = Math.min(answer, Math.abs(n - 2 * size));
}
function calculateSize(referencePoint, connectionCheck, visitedCheck) {
let size = 1;
visitedCheck[referencePoint] = true;
for (const num of connectionCheck[referencePoint]) {
if (!visitedCheck[num]) {
visitedCheck[num] = true;
size += calculateSize(num, connectionCheck, visitedCheck);
}
}
return size;
}
return answer;
}
|
cs |
https://school.programmers.co.kr/learn/courses/30/lessons/86971
반응형
'[Snow-ball]프로그래밍(컴퓨터) > Algorithm Training' 카테고리의 다른 글
[Algorithm] 추억 점수 ( Programmers - JavaScript, Python ) (1) | 2024.01.04 |
---|---|
[Algorithm] 우박수열 정적분 ( Programmers - JavaScript, Python ) (1) | 2024.01.03 |
[Algorithm] 연속 부분 수열 합의 개수 ( Programmers - JavaScript ) (0) | 2023.12.29 |
[Algorithm] 택배상자 ( Programmers - JavaScript ) (1) | 2023.12.28 |
[Algorithm] 롤케이크 자르기 ( Programmers - JavaScript ) (1) | 2023.12.26 |
Comments