๋ฌธ์ ์ถ์ฒ: https://programmers.co.kr/learn/courses/30/lessons/76503
๋ฌธ์ ์ค๋ช
DFS๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๋ ์์ด๋์ด๊ฐ ์ ๋ ์ฌ๋ผ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ ๋ฌธ์ ์ ๋๋ค. ์ ์ ์ ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ ๋ฐฉ๋ฒ์ผ๋ก DFS๊ฐ ์ ์ ๋ ์ฌ๋์๊น์? ์ ๋ ๋ฐ๋ณด์ ๋๋ค.
๋ง์ฝ ๋ฆฌ์คํธ a์ ์์์ ํฉ์ด 0์ด ๋์ง ์๋๋ค๋ฉด, ์ฃผ์ด์ง ์ฐ์ฐ์ ํตํด ํธ๋ฆฌ์ ๋ชจ๋ ๊ฐ์ค์น๋ฅผ 0์ผ๋ก ๋ง๋ค ์ ์์ผ๋ฏ๋ก -1์ ๋ฐํํฉ๋๋ค.
DFS๋ฅผ ์ด์ฉํด์ ์ ์ ์ ํ์ํ๋๋ฐ, ์ ์ผ ๋ ์ ์ (์ฐ๊ฒฐ๋ ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด ์๋ ๊ฒฝ์ฐ)๋ถํฐ 0์ผ๋ก ๋ง๋ค์ด์ค๋๋ค. 0์ผ๋ก ๋ง๋ค์ด์ค๋ค๋ ๊ฒ์ ๊ฒฐ๊ตญ ์์ ์ dfs๋ก ํธ์ถํ ๋ถ๋ชจ ์ ์ ์ ์์ ์ ๊ฐ์ค์น๋ฅผ ๋ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ํ์ฌ ์ ์ ์ 0์ผ๋ก ๋ง๋ค๊ธฐ ์ํ ์ฐ์ฐ์ ํ์๋ ์ ์ ์ ๊ฐ์ค์น์ ์ ๋๊ฐ์ ๋๋ค.
์์ค์ฝ๋
import sys
sys.setrecursionlimit(300000)
from collections import defaultdict
answer = 0
def dfs(x, a, tree, visited):
global answer
visited[x] = 1
for y in tree[x]:
if not visited[y]:
visited[y]
a[x] += dfs(y, a, tree, visited)
answer += abs(a[x])
return a[x]
def solution(a, edges):
global answer
if sum(a) != 0:
return -1
tree = defaultdict(list)
for i, j in edges:
tree[i].append(j)
tree[j].append(i)
visited = [0]*(len(a))
dfs(0, a, tree, visited)
return answer
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ์๋ฌผ์ ์ ์ด์ (0) | 2021.07.24 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ๋ฌด์ง์ ๋จน๋ฐฉ ๋ผ์ด๋ธ (0) | 2021.07.21 |
[ํ๋ก๊ทธ๋๋จธ์ค/Pythonํ์ด์ฌ] ์ง๊ฒ๋ค๋ฆฌ ๊ฑด๋๊ธฐ (0) | 2021.05.17 |
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ๋ถ๋ ์ฌ์ฉ์ (0) | 2021.05.17 |
[ํ๋ก๊ทธ๋๋จธ์ค / Pythonํ์ด์ฌ] ํํ (0) | 2021.05.15 |