GitHub ID : soohyun-dev
윤수현의 개발 공간
GitHub ID : soohyun-dev
전체 방문자
오늘
어제
  • 분류 전체보기 (918)
    • 성장기록 (49)
      • 성장기록 (3)
      • 우아한테크코스 (16)
      • 프로젝트 (15)
      • TIL (14)
      • 테오의 스프린트 (1)
    • 프로그래밍언어 (88)
      • C언어 (14)
      • HTML\CSS (12)
      • JavaScript (7)
      • React (23)
      • Python (11)
      • JAVA (14)
      • TypeScript (6)
    • 알고리즘 공부 (736)
      • 코드업 - 파이썬 (108)
      • 백준 - 파이썬 (468)
      • 백준 - 자바스크립트 (125)
      • 프로그래머스 - 파이썬 (1)
      • 프로그래머스 - 자바스크립트 (34)
    • 책 리뷰 (9)
      • 프로그래밍 (3)
      • 독서 (6)
    • 전자기기 (1)
    • 일상, 일기 (18)
    • 기술 세미나 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • PYTHON
  • 코딩
  • 코드업파이썬
  • 파이썬
  • 자바스크립트
  • 코딩테스트
  • 백준파이썬
  • 프로그래밍언어
  • 프로그래머스자바스크립트
  • 프론트엔드
  • 영어독해
  • 프로그래머스
  • 프로그래머스풀이
  • 백준
  • 백준풀이
  • 영어
  • 코드업
  • 코테
  • 독해
  • javascript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
GitHub ID : soohyun-dev

윤수현의 개발 공간

백준/ Gold 5 문제 , 백준 파이썬 17073, 나무 위의 빗물 [트리]
알고리즘 공부/백준 - 파이썬

백준/ Gold 5 문제 , 백준 파이썬 17073, 나무 위의 빗물 [트리]

2022. 10. 29. 13:11

백준/ Gold 5 문제 , 백준 파이썬 1068 , 나무 위의 빗물 [트리]

 

 

✔️Check Point !   ( 해당사항 ✓체크 )

1. 막힘 없이 수월하게 풀린 문제인가?

2. 1시간이내로 풀렸던 문제인가?

3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?

4. 시간을 써도 도무지 풀 수 없는 문제인가?

5. 솔루션을 찾아봤는가?

-------------------------------------------------------------------------------------------

난이도 체감 🧑‍💻
1. 최상
2. 상
3. 중
4. 하


이해도 🙆‍♂️
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함


덧붙일 말 🏷️
node.js 로 DFS 풀이는 recursion error,  BFS 풀이는 메모리 초과로 계속 틀렸던 문제이다. 
문제 해답 자체는 리프노드만 찾으면 되는 건데, 계속 오류가나서 파이썬으로 풀었다.
똑같은 로직인데, 파이썬으로는 통과하고 자바스크립트로는 틀리는 문제.

 

 

 

 

문제 출처 🏠

https://www.acmicpc.net/problem/17073

 

17073번: 나무 위의 빗물

첫째 줄에 트리의 노드의 수 N과 1번 노드에 고인 물의 양을 의미하는 정수 W가 주어진다. (2 ≤ N ≤ 500,000, 1 ≤ W ≤ 109) 다음 N-1줄에 걸쳐, 트리에 존재하는 간선의 정보가 U V의 형태로 주어진다

www.acmicpc.net

 

 

요구사항 📋

1번 정점에 저장되어있는 물을 자식노드로 일정한 비율로 나누어 전달.
물을 받은 자식노드에도 그 노드의 자식노드가 있다면, 똑같이 수행한다.
더이상, 물을 전달하지 않을때 물이 담긴 노드들의 평균값을 구하시오.

 

 

 

해결 전략 📝

트리의 간선들을 모두 이은 다음. 1번노드부터 BFS 진행.
이때 물을 1씩 나누지말고, 자식노드의 갯수만큼 나누어서 배분.
최종적으로 각 노드에 0이 아닌 값들의 갯수와 합을 계산하여 나누기.

 

 

 

기능 목록 📲

1. 트리의 간선을 이음. 이때, 양방향 그래프로 저장.  (누가 부모인지 간선만 보고 알 수 없음.)
2. 리프 노드의 개수를 구하는 함수. => cntLeafNodes

 

주의사항 ⚠️.

부모노드 숫자가 무조건 자식노드보다 크다는 보장 없음. => 리프노드 찾기

 

 

정답 💯

 

 

import sys
input=sys.stdin.readline
sys.setrecursionlimit(10**6)

N,W=map(int,input().split())
Nodes=[[] for i in range(N+1)]
visited=[False for j in range(N+1)]
for i in range(N-1):
    a,b=map(int,input().split())
    Nodes[a].append(b)
    Nodes[b].append(a)
    
def cntLeafNodes (node):
    global cnt
    visited[node]=True;
    if (len(Nodes[node])==1 & visited[Nodes[node][0]]):
        cnt+=1
        return
    for nextNode in Nodes[node]:
        if not visited[nextNode]:
            cntLeafNodes(nextNode)

cnt=0        
cntLeafNodes(1)
print(W/cnt)

 

느낀점 🧑‍💻

 

똑같은 풀이인데, 파이썬은 통과하고 자바스크립트는 런타임 에러가 나고... 이  과정속에서의 시간 소비가 너무 크다.

반응형

'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글

백준/ Silver 1 문제 , 백준 파이썬 14675 , 단절점과 단절선  (1) 2022.10.27
백준/ Gold 5 문제 , 백준 파이썬 5430 , AC  (0) 2022.10.20
백준/ Gold 5 문제 , 백준 파이썬 2293 , 동전 1 [dp]  (0) 2022.10.13
백준/ Gold 5 문제 , 백준 파이썬 2096 , 내려가기 [dp]  (0) 2022.10.07
백준/ Silver 4 문제 , 백준 파이썬 13699 , 점화식 [dp]  (0) 2022.09.12
    '알고리즘 공부/백준 - 파이썬' 카테고리의 다른 글
    • 백준/ Silver 1 문제 , 백준 파이썬 14675 , 단절점과 단절선
    • 백준/ Gold 5 문제 , 백준 파이썬 5430 , AC
    • 백준/ Gold 5 문제 , 백준 파이썬 2293 , 동전 1 [dp]
    • 백준/ Gold 5 문제 , 백준 파이썬 2096 , 내려가기 [dp]
    GitHub ID : soohyun-dev
    GitHub ID : soohyun-dev
    환영합니다!😊 이곳은 저의 개발에 관한 내용들을 정리하는 공간입니다. 알고리즘 풀이에도 관심이 많아요. 좋은 하루 되세요~! github : soohyun_dev

    티스토리툴바