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 | 29 | 30 | 31 |
Tags
- 스프링 배치 메타 테이블
- 날짜형을 문자형으로
- 마이바티스 트랜잭션
- str_to_date
- 무시하기
- JSON 분할
- 스프링 리액티브 프로그래밍
- batchInsert
- jar 소스보기
- 스프링 웹플럭스
- JSON 분해
- JSONArray 분할
- spring webflux
- JSONObject 분할
- nonblocking
- 폐기하기
- org.json
- spring reactive programming
- 성능개선
- multi update
- date_format
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- git stage
- 스프링 배치 공식문서
- 마리아디비
- 문자형을 날짜형으로
- Meta Table
- 스테이지에 올리기
- JSON 분리
- JobExecutionAlreadyRunningException
Archives
- Today
- Total
ebson
boj.kr/1967 트리의 지름 (gold4) 파이썬 풀이 본문
1. 그래프 행렬 초기화
2. 인접한 노드에 대해 순환호출하되 거리 누적해 전달하는 dfs 함수 정의
3. 인접행렬 순회하면서 dfs 호출하고 최대 거리 저장
4. 최대 거리 리스트에서 최댓값 출력
문제에 제시된 테스트 케이스는 통과했으나 제출 시 메모리 초과했다.
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
N = int(input())
adj = [list(map(int, input().split())) for _ in range(N-1)]
graph = [[0] * N for _ in range(N)]
for (y, x, d) in adj:
graph[y-1][x-1] = d
graph[x-1][y-1] = d
def dfs(cur, nxt, d):
global max_d
max_d = d if max_d < d else max_d
for node in range(N):
if graph[nxt][node] != 0 and not cur == node: # and not visited[nxt][node]
nd = d + graph[nxt][node]
dfs(nxt, node, nd)
max_d = -1e9
max_d_list = set()
for (c, n, d) in adj:
dfs(c-1, n-1, d)
max_d_list.add(max_d)
max_d = -1e9
dfs(n-1, c-1, d)
max_d_list.add(max_d)
max_d = -1e9
print(max(max_d_list))
정답 풀이
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
N = int(input())
graph = [[] for _ in range(N+1)]
for _ in range(N-1):
(s, e, d) = list(map(int, input().split()))
graph[s].append([e, d])
graph[e].append([s, d])
def dfs(cur, d):
for (nxt, nd) in graph[cur]:
if visited[nxt] == -1:
visited[nxt] = d + nd
dfs(nxt, d + nd)
visited = [-1] * (N+1)
visited[1] = 0
dfs(1, 0)
start = visited.index(max(visited))
visited = [-1] * (N+1)
visited[start] = 0
dfs(start, 0)
print(max(visited))
그래프 인덱스를 트리의 노드 번호로 사용한다.
트리의 루트로부터 가장 먼거리에 있는 노드로부터 가장 먼 거리에 있는 노드까지의 거리가 트리의 지름이다.
'ALGORITHM STUDY WITH PYTHON > BFS | DFS' 카테고리의 다른 글
boj.kr/1068 트리 (gold5) 파이썬 풀이 (0) | 2023.05.03 |
---|---|
boj.kr/1167 트리의 지름 (gold2) 파이썬 풀이 (0) | 2023.05.02 |
boj.kr/2573 빙산 (gold4) 파이썬 풀이 (0) | 2023.05.01 |
boj.kr/1707 이분 그래프 (gold4) 파이썬 풀이 (0) | 2023.05.01 |
boj.kr/1987 알파벳 (gold4) 파이썬 풀이 (0) | 2023.05.01 |
Comments