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 |
Tags
- 스프링배치 메타테이블
- mybatis
- api 아이템 리더
- 아이템 리더 페이징 처리
- 스프링 트랜잭션 관리
- step 값 공유
- executioncontext
- 트랜잭션 분리
- JSONObject 분할
- step 사이 변수 공유
- spring batch 변수 공유
- 읽기 작업과 쓰기 작업 분리
- abstractpagingitemreader
- JSONArray 분할
- job parameter
- spring batch 5
- 마이바티스 트랜잭션
- Spring Batch
- 스프링배치 엑셀
- flatfileitemwriter
- JSON 분할
- JSON 분리
- 스프링배치 csv
- executioncontext 변수 공유
- step 여러개
- 선언적 트랜잭션 관리
- stepexecutionlistener
- 아이템 리더 커스텀
- aop proxy
- 스프링 배치 5
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