백준 17073 : 나무 위의 빗물 (Python)

liliili·2022년 12월 18일

백준

목록 보기
77/214

본문 링크

import sys
input=sys.stdin.readline

N,W=map(int,input().split())
Tree=[ [] for _ in range(N+1) ]

for i in range(N-1):
    a,b=map(int,input().split())
    Tree[a].append(b)
    Tree[b].append(a)

count=0
for i in range(2,len(Tree)):
    if len(Tree[i])==1: #리프 노드라면
        count+=1

print("%.3f"%(W/count))

📌 어떻게 접근할 것인가?

문제를 잘 읽어보자. 루트노드부터 물을 흘려보내서 점점 아래로 물이 내려간다.

이때 가장 중요한 문장은 다음과 같다.

  • 영훈이는 나무를 바라보면서 더 이상 물이 움직이지 않는 상태가 되었을 때 각 정점에 어느 정도의 물이 있게 될지 궁금해졌다.

즉 결국에는 물이 리프노드에만 존재하게 된다. 따라서 리프노드의 개수를 물의 양에 나눈 값이 답이 된다.

✅ 코드에서 주의 해야할점

  • 루트노드는 리프노드가 될 수 없기 때문에 반복문은 2부터 시작한다.

0개의 댓글