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
- 무시하기
- JSON 분해
- JSONArray 분할
- 스테이지에 올리기
- spring webflux
- 성능개선
- git stage
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- org.json
- date_format
- JSON 분리
- multi update
- JSON 분할
- Meta Table
- 날짜형을 문자형으로
- jar 소스보기
- 폐기하기
- nonblocking
- str_to_date
- 문자형을 날짜형으로
- JobExecutionAlreadyRunningException
- 마리아디비
- spring reactive programming
- 스프링 웹플럭스
- 스프링 배치 공식문서
- 스프링 리액티브 프로그래밍
- 마이바티스 트랜잭션
- batchInsert
- JSONObject 분할
- 스프링 배치 메타 테이블
Archives
- Today
- Total
ebson
boj.kr/1068 트리 (gold5) 파이썬 풀이 본문
graph 를 하나 더 생성해 풀이하여 테스트 케이스 통과했으나 제출 시 실패했다.
N = int(input())
parents = list(map(int, input().split()))
delete = int(input())
graph = [[] for _ in range(N)]
for i in range(1, N):
graph[parents[i]].append(i)
leaf_cnt = 0
def dfs(node):
global leaf_cnt
for child in graph[node]:
if len(graph[child]) > 0:
dfs(child)
else:
leaf_cnt +=1
dfs(0)
leaf_cnt_0 = leaf_cnt
leaf_cnt = 0
dfs(delete)
if delete == 0:
leaf_cnt = 0
elif len(graph[delete]) > 0:
leaf_cnt = leaf_cnt_0 - leaf_cnt
elif len(graph[delete]) == 0:
if parents.count(parents[delete]) == 1:
leaf_cnt = leaf_cnt_0
else:
leaf_cnt = leaf_cnt_0 - 1
print(leaf_cnt)
정답 풀이
1. 삭제되는 노드 하위의 모든 노드를 삭제 처리하기 위한 dfs를 다음과 같이 정의
1.1. 삭제되는 노드번호를 인자로 전달
1.2. 전달받은 삭제되는 노드 번호를 인덱스로 갖는 tree 의 요소값을 -2으로 갱신
1.3. 0번부터 마지막 노드 i 까지 순회하면서 tree[i] 값이 삭제되는 노드 번호이면, dfs(i)를 호출
2. dfs(삭제되는노드번호) 호출
3. cnt 변수를 0으로 초기화
4. 0번째 노드부터 마지막 노드 j까지 순회하면서 tree[j]가 -2(삭제된 노드)가 아니고 j가 tree에 없으면(자식노드가 없으면)
cnt를 1씩 증감
5. cnt값을 출력
N = int(input())
tree = list(map(int, input().split()))
delete = int(input())
import sys
sys.setrecursionlimit(10**9)
def dfs(parent):
tree[parent] = -2
for i in range(N):
if tree[i] == parent:
dfs(i)
dfs(delete)
cnt = 0
for j in range(N):
if tree[j] != -2 and j not in tree:
cnt += 1
print(cnt)
삭제되는 노드와 그 자식 노드들을 모두 표시하고 해당 제외한 리프 노드들을 카운트 할 수 있다.
참고출처
"[DFS] 백준 1068번 “트리” Python 풀이", wooono.tistory.com, 2022년 11월 31일 수정, 2023년 6월 21일 접속, https://wooono.tistory.com/636.
'ALGORITHM STUDY WITH PYTHON > BFS | DFS' 카테고리의 다른 글
boj.kr/1926 그림 (silver1) 파이썬 풀이 (0) | 2023.05.04 |
---|---|
boj.kr/9466 팀 프로젝트 (gold3) 파이썬 풀이 (0) | 2023.05.03 |
boj.kr/1167 트리의 지름 (gold2) 파이썬 풀이 (0) | 2023.05.02 |
boj.kr/1967 트리의 지름 (gold4) 파이썬 풀이 (0) | 2023.05.02 |
boj.kr/2573 빙산 (gold4) 파이썬 풀이 (0) | 2023.05.01 |
Comments