Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 |
Tags
- 삼성SDS Brigthics
- 삼성 SDS
- 포스코 청년
- 데이터분석
- 캐글
- 데이터 분석
- 혼공학습단
- 혼공머신러닝딥러닝
- Brightics
- 혼공
- Brigthics를 이용한 분석
- 브라이틱스
- 브라이틱스 서포터즈
- 삼성SDS Brightics
- Brigthics Studio
- 영상제작기
- 직원 이직률
- Brigthics
- 포스코 아카데미
- 모델링
- Brightics Studio
- 삼성 SDS Brigthics
- Brightics를 이용한 분석
- 노코드AI
- 혼공머신
- 팀 분석
- 삼성SDS
- 개인 의료비 예측
- 추천시스템
- 직원 이직여부
Archives
- Today
- Total
데이터사이언스 기록기📚
[백준/Python] 1967번(DFS)_트리의 지름 본문
📌문제 유형
그래프 이론, 그래프 탐색, 트리, DFS (골드 Lv.4)
📌문제
📌나의 문제풀이
- 모든 노드 다 방문해서 DFS하면 시간 초과 → leaf node만 DFS, 이것도 시간초과
- 최종 방법 : 노드 1에서 가장 먼 노드 하나 선택 → 가장 먼 노드에서 시작하여 끝나는 지점이 가장 먼것이 최대 지름
- DFS 두 번 사용한 방법!
import sys
sys.setrecursionlimit(10**5)
n = int(input())
graphs = [[] for _ in range(n+1)]
for _ in range(n-1):
a, b, dist = map(int, sys.stdin.readline().split())
graphs[a].append([b, dist])
graphs[b].append([a, dist])
def dfs(i,total,visited):
global max_,num
if total > max_:
max_ = total
num = i
for node, dis in graphs[i]:
if visited[node] == 0:
visited[node] = 1
dfs(node, total + dis,visited)
# 1에서 가장 먼 노드 찾기
visited = [0 for _ in range(n+1)]
max_,num = 0,0
dfs(1,0,visited)
# 최대값 찾기
ans = 0
visited = [0 for _ in range(n+1)]
visited[num] = 1
max_ = 0
dfs(num,0,visited)
if max_ > ans:
ans = max_
print(ans)
📌 다른사람의 문제풀이
- 동일한 방법, DFS 구성이 다름
- distance 자체를 배열로 만들어서 갱신하기
- global 보다 덜 복잡
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**9)
n = int(input())
graph = [[] for _ in range(n + 1)]
def dfs(x, wei):
for i in graph[x]:
a, b = i
if distance[a] == -1:
distance[a] = wei + b
dfs(a, wei + b)
# 트리 구현
for _ in range(n - 1):
a, b, c = map(int, input().split())
graph[a].append([b, c])
graph[b].append([a, c])
# 1번 노드에서 가장 먼 곳을 찾는다.
distance = [-1] * (n + 1)
distance[1] = 0
dfs(1, 0)
# 위에서 찾은 노드에 대한 가장 먼 노드를 찾는다.
start = distance.index(max(distance))
distance = [-1] * (n + 1)
distance[start] = 0
dfs(start, 0)
print(max(distance))
📌 리뷰
- leaf node까지 생각한건 좋았는데, 조금 더 생각했으면 답지 안보고 풀 수 있었을 듯
- 하단의 블로그 풀이순서 참고하여 코드 짬
728x90
'Coding Test > 백준(Python)' 카테고리의 다른 글
[백준/Python] 10271번(완탐)_고층 건물 (0) | 2023.10.09 |
---|---|
[백준/Python] 17471번(DFS)_게리맨더링 (0) | 2023.09.26 |
[백준/Python] 11559번(BFS)_Puyo Puyo (0) | 2023.09.14 |
[백준/Python] 2458번(DFS)_키 순서 (0) | 2023.09.12 |
[백준/Python] 16938번(브루트포스 알고리즘)_캠프 준비 (0) | 2023.09.12 |
Comments