File tree 1 file changed +8
-0
lines changed
1 file changed +8
-0
lines changed Original file line number Diff line number Diff line change @@ -18,11 +18,14 @@ const inputs = input
18
18
. slice ( 1 )
19
19
. map ( ( v ) => v . split ( " " ) . map ( ( v2 ) => Number ( v2 ) ) ) ;
20
20
21
+ // n: 노드의 개수
21
22
const n = Number ( input . trim ( ) . split ( "\n" ) [ 0 ] ) ;
23
+ // dp: dp[i][0] = i번 노드가 얼리어답터가 아닐 때, dp[i][1] = i번 노드가 얼리어답터일 때
22
24
const dp = Array . from ( { length : n + 1 } , ( ) =>
23
25
Array . from ( { length : 2 } , ( ) => 0 )
24
26
) ;
25
27
28
+ // 양방향 그래프
26
29
const map = { } ;
27
30
const visited = Array . from ( { length : n + 1 } , ( ) => false ) ;
28
31
inputs . forEach ( ( v ) => {
@@ -37,13 +40,18 @@ const dfs = (cur) => {
37
40
dp [ cur ] [ 0 ] = 0 ;
38
41
dp [ cur ] [ 1 ] = 1 ;
39
42
43
+ // 현재 노드의 자식 노드들을 탐색
40
44
for ( const node of map [ cur ] ) {
41
45
if ( visited [ node ] ) continue ;
42
46
dfs ( node ) ;
47
+ // 현재 노드가 얼리어답터가 아닐 때, 자식 노드는 얼리어답터여야 한다.
43
48
dp [ cur ] [ 0 ] += dp [ node ] [ 1 ] ;
49
+ // 현재 노드가 얼리어답터일 때, 자식 노드는 얼리어답터일 수도 있고 아닐 수도 있다.
50
+ // 따라서 최소를 구하므로 자식 노드가 얼리어답터일 때와 아닐 때 중 작은 값을 더해준다.
44
51
dp [ cur ] [ 1 ] += Math . min ( dp [ node ] [ 0 ] , dp [ node ] [ 1 ] ) ;
45
52
}
46
53
} ;
47
54
48
55
dfs ( 1 ) ;
56
+ // 최상위 노드인 1번 노드가 얼리어답터일 때와 아닐 때 중 작은 값을 출력
49
57
console . log ( Math . min ( dp [ 1 ] [ 0 ] , dp [ 1 ] [ 1 ] ) ) ;
You can’t perform that action at this time.
0 commit comments