Post

๋“ฑ๋Œ€ lv3

๐ŸŒˆ๋ฌธ์ œ ๋งํฌ

Desktop View

Desktop View

Desktop View

Desktop View

Desktop View

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
import sys
from collections import defaultdict
sys.setrecursionlimit(100000)

A = defaultdict(list)
vis = [False] * 100000

def dfs(node):
    vis[node] = True
    if not A[node]:
        return 1, 0

    on, off = 1, 0
    for v in [v for v in A[node] if not vis[v]]:
        leaf_on, leaf_off = dfs(v)
        on += min(leaf_on, leaf_off)
        off += leaf_on
    return leaf_on, leaf_off

def solution(n, lighthouse):
    for node, v in lighthouse:
        A[node].append(v) 
        A[v].append(node) 

    on, off = dfs(1) 
    return min(on, off)

ํ•ด์„ค

1
2
sys.setrecursionlimit(100000)
# ์žฌ๊ท€ํ•จ์ˆ˜๋Š” 1000~3000๋ฒˆ ๋ฐ˜๋ณต์ธ๋ฐ ๋„‰๋„‰์žก์•„ 10๋งŒ๋ฒˆ์œผ๋กœ ๋Š˜๋ ค์คŒ
1
2
3
4
5
def dfs(node): # ์‹œ์ž‘๋…ธ๋“œ์ธ node๋ฅผ ๋ฐ›์•„ ํ•ด๋‹น๋…ธ๋“œ์—์„œ ์ถœ๋ฐœํ•ด DFS ์ˆ˜ํ–‰
    vis[node] = True

    if not A[node]: # node๊ฐ€ ์ž์‹๋…ธ๋“œ๋ผ๋ฉด node๊ฐ€ ์ผœ์ง„ ์ƒํƒœ๋กœ ์ตœ์†Œ ์ ๋“ฑ ๋“ฑ๋Œ€ 1๊ฐœ, ๊บผ์กŒ์„ ๋•Œ 0๊ฐœ ๋ฐ˜ํ™˜
      return 1, 0
1
2
3
4
5
6
7
8
# ๋‚ด๊ฐ€ ๋ถ€๋ชจ๋…ธ๋“œ๋ผ๋ฉด
    on, off = 1, 0
    for v in [v for v in A[node] if not vis[v]]:

        leaf_on, leaf_off = dfs(v)
        on += min(leaf_on, leaf_off)
        off += leaf_on
    return on, off
1
2
3
4
5
6
7
8
9
10
#---------------- ๊ณตํ†ต์  ๋ฐ ์ฐจ์ด -----------------

๊ณตํ†ต์ :  A[u]์—์„œ vis[v]๊ฐ€ False์ธ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐ˜๋ณต

์ฐจ์ด
for v in [v for v in A[node] if not vis[v]]:
# ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด ์ˆœํšŒ

v for v in A[node] if not vis[v]:
# (๋ฆฌ์ŠคํŠธ ์•ˆ๋งŒ๋“ฆ) v์”ฉ ์ปค์ง€๋ฉฐ ๊ฐ v๋งˆ๋‹ค ์ˆœํšŒํ•œ๋‹ค ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ณณ์„
1
2
3
4
A[node].append(v) # ๋ถ€๋ชจ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•  ๋ฆฌํ”„๋…ธ๋“œ ์ถ”๊ฐ€
A[v].append(node) # ๋ฐฉ๋ฌธํ•  ๋ฆฌํ”„๋…ธ๋“œ์— ๋ถ€๋ชจ๋…ธ๋“œ ์—ฐ๊ฒฐ

on, off = dfs(1) # 1๋ถ€ํ„ฐ ํƒ์ƒ‰ ์‹œ์ž‘




์ฐธ๊ณ 

https://www.ai-bio.info/programmers/133500

This post is licensed under CC BY 4.0 by the author.
3D GIF