Skip to content

Commit 662fe3a

Browse files
committed
2 parents 8b81f92 + 1f3ab93 commit 662fe3a

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

Diff for: 4주차/채수혁/골드4__사회망_서비스(SNS).js

+8
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@ const inputs = input
1818
.slice(1)
1919
.map((v) => v.split(" ").map((v2) => Number(v2)));
2020

21+
// n: 노드의 개수
2122
const n = Number(input.trim().split("\n")[0]);
23+
// dp: dp[i][0] = i번 노드가 얼리어답터가 아닐 때, dp[i][1] = i번 노드가 얼리어답터일 때
2224
const dp = Array.from({ length: n + 1 }, () =>
2325
Array.from({ length: 2 }, () => 0)
2426
);
2527

28+
// 양방향 그래프
2629
const map = {};
2730
const visited = Array.from({ length: n + 1 }, () => false);
2831
inputs.forEach((v) => {
@@ -37,13 +40,18 @@ const dfs = (cur) => {
3740
dp[cur][0] = 0;
3841
dp[cur][1] = 1;
3942

43+
// 현재 노드의 자식 노드들을 탐색
4044
for (const node of map[cur]) {
4145
if (visited[node]) continue;
4246
dfs(node);
47+
// 현재 노드가 얼리어답터가 아닐 때, 자식 노드는 얼리어답터여야 한다.
4348
dp[cur][0] += dp[node][1];
49+
// 현재 노드가 얼리어답터일 때, 자식 노드는 얼리어답터일 수도 있고 아닐 수도 있다.
50+
// 따라서 최소를 구하므로 자식 노드가 얼리어답터일 때와 아닐 때 중 작은 값을 더해준다.
4451
dp[cur][1] += Math.min(dp[node][0], dp[node][1]);
4552
}
4653
};
4754

4855
dfs(1);
56+
// 최상위 노드인 1번 노드가 얼리어답터일 때와 아닐 때 중 작은 값을 출력
4957
console.log(Math.min(dp[1][0], dp[1][1]));

Diff for: 4주차/채수혁/실버2__트리의_부모_찾기.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,39 @@ const input = process.execArgv.includes("--stack-size=65536")
1414

1515
const inputs = input.trim().split("\n");
1616
let cnt = 0;
17+
// n: 노드의 개수
1718
const n = Number(inputs[0]);
1819
const arr = inputs.slice(1).map((v) => v.split(" ").map((v2) => Number(v2)));
20+
// 양방향 그래프
1921
const map = {};
2022
arr.forEach((v) => {
2123
if (map[v[0]]) map[v[0]].push(v[1]);
2224
else map[v[0]] = [v[1]];
2325
if (map[v[1]]) map[v[1]].push(v[0]);
2426
else map[v[1]] = [v[0]];
2527
});
28+
// 부모 노드를 저장할 배열
2629
const parents = Array.from({ length: n + 1 }, () => 0);
30+
// 방문 여부를 저장할 배열
2731
const visited = Array.from({ length: n + 1 }, () => false);
2832

33+
// 1번 노드부터 탐색 시작
2934
const que = [[1, map[1]]];
3035

3136
while (que.length > 0) {
37+
// cur: nodeArr 의 부모노드 , nodeArr: 부모 노드와 연결된 노드들의 배열
3238
const [cur, nodeArr] = que.shift();
33-
3439
visited[cur] = true;
3540

3641
for (const node of nodeArr) {
42+
// 이미 방문한 노드라면 continue
3743
if (visited[node]) continue;
44+
// 특정 노드번호의 부모노드를 parents 라는 부모 배열에 저장
3845
parents[node] = cur;
46+
// 현재 노드가 부모노드가 되어서 다음 노드를 탐색
3947
que.push([node, map[node]]);
4048
}
4149
}
50+
51+
// 출력
4252
console.log(parents.slice(2).reduce((a, v) => a + v + "\n", ""));

0 commit comments

Comments
 (0)